特殊的双下方法
-
特殊的双下方法:原本是开发python这个语言的程序员用的,源码中使用的,我们不能轻易使用。慎用!
-
双下方法:你不知道你干了什么就触发了某个双下方法
# len 使用len() 触发
class B:
def init(self,name,age):
self.name = name
self.age = agedef __len__(self): return len(self.__dict__) b = B('liye',28) print(len(b)) # __hash__ # __str__ 必须return一个字符串类型 打印时触发print 打印对象触发 直接str转化也可以触发 # __repr__ str优先级高于repr print('我叫%s' % ('alex')) print('我叫%r' % ('alex')) print('我叫{}'.format('alex')) a = 'alex' print(f'我叫{a}') print(repr('ting')) # __call__ 对象后面加括号,触发执行 这个对象从属于类(父类)的__call__方法 # __eq__ # __del__ 析构方法 当对象在内存中被释放时 自动触发执行 # __new__ new一个对象 对象是object类的__new__方法 产生了一个对象 构造方法 # 类名加括号先要触发object的__new__方法,object的__new__产生一个对象空间并返回给类名加括号,再触发__init__给对象封装属性 # 类名() # 1. 先触发 object的__new__方法,此方法在内存中开辟一个对象空间 # 2. 执行__init__方法,给对象封装属性 # __init__ 不允许有return # 单例模式 python中的设计模式 方便对实例个数的控制 # 一个类只允许实例化一个对象 class A: __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = object.__new__(cls) # return cls.__instance # else: # return cls.__instance return cls.__instance obj = A() print(obj) obj1 = A() print(obj1)