python 面向对象 类的内置方法

  1. 判断是不是类cls的对象
    class A:
        pass
    
    a = A()
    print(isinstance(a,A))
  2. 判断类sub是不是super的子类
    class A:
        pass
    
    class B(A):
        pass
    
    print(issubclass(B,A))
  3. __str__
    #调用str(obj)其实内部就是在调用__str__
    #obect内置有一个__str__,调用时,返回调用该方法的对象的内存地址
    
    class A:
        def __str__(self):
            return 'This is class A'
    
    a = A()
    print(str(a))
  4. __repr__
    #将对象转化为供解释器读取的形式
    
    class A:
        def __repr__(self):
            return str(self.__dict__)
    
    #调用%r和repr,其实都是调用__repr__()
    
    #如果类没有str方法,会调用类的repr方法,如果类没有repr,会调用父类的str方法
    #反过来如果没有repr方法,不会调用str方法,而会直接调用父类的repr
  5. __del__
    #析构方法:对象在被销毁的时候运行的函数,解释器会自动执行,一般不用实现
  6. item相关的方法
    class Person:
    
        def __getitem__(self,key):   # 获取
            return self.__dict__[key]
    
        def __setitem__(self,key,value):    #设置
            self.__dict__[key] = value
    
        def __delitem__(self,key):    #删除
            self.__dict__.pop(key)
    
    p = Person()
    p['a'] = 1
    print(p['a'])
    del p['a']
    print(p['a'])    #这里会报KeyError
  7. __new__
    #构造方法
    #__init__不是构造方法,而是__new__
    
    class A:
        def __new__(cls, *args, **kwargs):
            return object.__new__(A,*args, **kwargs)    #调用object类的__new__方法,返回self
    
    
    #单例模式
    #一个类只有一个实例
    class A:
        __instance = False    #是否创建了实例的标志位
        def __new__(cls, *args, **kwargs):
            if cls.__instance:
                return cls.__instance
            cls.__instance = object.__new__(A,*args, **kwargs)
            return cls.__instance
  8. __call__
    #对象后面加括号执行
    #如:对象()或类()()
    
    class A:
        def __call__(self):
            print('A')
    
    a = A()
    a()
  9. __len__
    #使用len()时执行
    
    class Life:
        def __init__(self,name,length):
            self.name = name
            self.length = length
    
        def __len__(self):
            return self.length
    
    hsr = Life('hsr',100)
    print(len(hsr))
  10. __hash__
    #对对象进行hash运算
    class
    Student: def __init__(self,no,name): self.no = no self.name = name def __hash__(self): return hash(str(self.no)+self.name) s = Student(102302,'hsr') print(hash(s))
  11. __eq__
    class Life:
        def __init__(self,name,length):
            self.name = name
            self.length = length
    
        def __len__(self):
            return self.length
    
        def __eq__(self, other):
            return other.length == self.length
    
    hsr = Life('hsr',100)
    ttt = Life('ttt',100)
    print(hsr == ttt)
  12. set依赖hash和eq方法,实现了这两个,对象就可以放入set实现去重

猜你喜欢

转载自www.cnblogs.com/walthwang/p/10402982.html