zoukankan      html  css  js  c++  java
  • 绑定方法与非绑定方法, 反射

    绑定方法与非绑定方法, 反射

    绑定方法与非绑定方法

    在类内部定义的函数, 分为两大类:

    1. 绑定方法: 绑定给谁, 就应该由谁来调用, 谁来调用就会把调用者当做第一个参数自动传入

      ​ 绑定到对象的方法: 在类内部定义的没有任何装饰器修饰的

      ​ 绑定到类的方法, 使用classmethod装饰器修饰

    2. 非绑定方法: 不与类或者对象绑定

    import settings
    class People:
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
    
        def tell_info(self):
            print("name:%s, age:%s, sex:%s" %(self.name,self.age,self.sex))
    
        @classmethod #绑定方法到类, 不需要实例化, 直接调用, People.from_conf()
        def from_conf(cls):
            obj=cls(settings.name,settings.age,settings.sex)
            return obj
        
        @staticmethod #非绑定方法, 不强制给方法传参
        def create_id():
            m=hashlib.md5(str(time.time()).encode('utf-8'))
            return m.hexdigest()
    
    # settings content
    # name='wtp'
    # age=30
    # sex='male'
    
    # p=People('egon',18,'male')
    # p.tell_info()
    # name:egon, age:18, sex:male
    
    # p=People.from_conf()
    # p.tell_info()
    # name:wtp, age:30, sex:male
    

    反射

    class test:
        def __init__(self,name):
            self.name1=name
        def name(self,age):
            print(age)
            print(self.name1)
    
    t=test('wtp')
    choice='name'
    print(hasattr(t,choice))        #判断对象t是否有name属性或方法        
    a=getattr(t,choice,None)   #如果对象t有属性或方法name, 则获取属性name的值或者方法, 如果没有, 则返回None
    a(18)
    # 输出
    # 18
    # wtp
    delattr(t,choice)               #删除对象t的属性choice
    print(getattr(t,choice))
    setattr(t,'age',18)             #为对象t增加属性age
    print(t.age)
    
    class Service:
        def run(self,cmds):
            func=cmds.split()
            if hasattr(self,func[0]):
                a=getattr(self,func[0])
                a(cmds)
    
        def get(self,cmds):
            print('run ',cmds)
    
        def put(self,cmds):
            print('run ',cmds)
    
    s=Service()
    s.run('get txt')
    # run  get txt
    
    s.run('put txt')
    # run  put txt
    
  • 相关阅读:
    300+值得收藏的设计师免费资源站
    Apache 隐藏入口文件 index.php
    Nginx 虚拟主机下支持Pathinfo并隐藏入口文件的完整配置
    Java多线程
    Java注解
    Java异常机制
    面向对象
    数组
    Java方法(函数)
    Java流程控制(Scanner)
  • 原文地址:https://www.cnblogs.com/peitianwang/p/14180858.html
Copyright © 2011-2022 走看看