• Python3 从零单排20_方法(绑定&内置)&反射


      非绑定方法 没有自动传值的功能 @staticmethod
      绑定方法 绑定给谁就给谁调用,调用时会自动将调用者作为第一个参数传递给函数
      1.绑定到对象的方法(不被任何装饰器装饰的函数)
      2.绑定到类的方法 @classmethod 装饰的函数
    class A:
        def __init__(self, name):
            self.name = name
    
        def call(self):  # 绑定到对象的方法,对象调用时默认将调用者作为第一个参数自动传入,类也可调用,但只是作为一个普通函数给类用,不会自动传值。
            print("my name is %s" % self.name)
    
        @classmethod  # 绑定到类的方法,类调用时默认将调用者作为第一个参数自动传入,对象调用时默认将调用者所属的类作为第一个参数自动传入。
        def func_class(cls):  # 一般写成 cls 与绑定到对象时写的self做区分,两个功能其实是一样的
            print(cls)
    
        @staticmethod  # 类和对象都可以直接使用,当普通函数那样使用
        def cal(x, y):
            print(x+y)
    
    
    a1 = A("xg")
    # # 调用对象绑定方法
    # a1.call()
    # A.call(a1)
    # # 调用类绑定方法
    # A.func_class()
    # a1.func_class()
    # # 调用非绑定方法
    # A.cal(1,2)
    # a1.cal(1,2)
    反射
    # 对象的属性操作,实际做的增删改查就是操作对象的 __dict__属性字典 , 类的属性操作类似
    # 判断是否含有属性
    print(hasattr(a1, "name"))  # true
    # 拿到属性值
    print(getattr(a1, "name"))  # 当不存在该属性时,会报错
    print(getattr(a1, "asd", None))  # 指定None,当不存在该属性时,不会报错
    # 设置属性值
    setattr(a1, "sex", "male")
    print(getattr(a1, "sex", None))
    # 删除属性
    delattr(a1, "sex")
    print(getattr(a1, "sex", None))
    
    # 反射的应用  类似于功能分发
    class Service:
        def run(self):
            while True:
                inp=input('>>: ').strip() #cmd='get a.txt'
                cmds=inp.split() #cmds=['get','a.txt']
    
                # print(cmds)
                if hasattr(self,cmds[0]):
                    func=getattr(self,cmds[0])
                    func(cmds)
    
    
        def get(self,cmds):
            print('get.......',cmds)
    
    
        def put(self,cmds):
            print('put.......',cmds)
    
    
    obj=Service()
    obj.run()
    内置方法:
    # isinstance(obj,cls)检查是否obj是否是类 -cls 的对象
    class Foo(object):
        pass
    obj = Foo()
    isinstance(obj, Foo)
    
    # issubclass(sub, super)检查sub类是否是 super 类的派生类
    class Foo(object):
        pass
    class Bar(Foo):
        pass
    issubclass(Bar, Foo)
    
    
    # item 将对象变成一个字典形式
    class A:
        def __init__(self, name):
            self.name = name
    
        def __getitem__(self, item):  # 当用字典形式查对象的属性时,会自动调用该方法
            print("getitem ....")
            return self.__dict__.get(item)
    
        def __setitem__(self, key, value):  # 当用字典形式设置对象的属性时,会自动调用该方法
            print("setitem ....")
            self.__dict__[key] = value
    
        def __delitem__(self, key):  # 当用字典形式删除对象的属性时,会自动调用该方法
            print("delitem ....")
            self.__dict__.pop(key)
    
    
    a = A("xg")
    print(a["name"])
    a["sex"] = 'male'
    print(a["sex"])
    del a["sex"]
    print(a["sex"])
    
    
    
    
  • 相关阅读:
    KMP算法
    IEEE754 32位浮点数表示范围
    银行家算法
    字符串类
    栈类
    稀疏数组类
    队列类
    多维数组类
    单向链表类
    哈希表类
  • 原文地址:https://www.cnblogs.com/znyyy/p/10144632.html
Copyright © 2020-2023  润新知