item系列
__getitem__
__setitem__
__delitem__
操作对象跟操作字典一样
class Foo: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __getitem__(self, item): if hasattr(self,item): return self.__dict__[item] def __setitem__(self, key, value): # 两个参数 self.__dict__[key] = value def __delitem__(self, key): del self.__dict__[key] f = Foo('egon',38,'男') print(f['name']) # 对__getitem__进行操作 返回egon f['hobby'] = '男' print(f.hobby, f['hobby']) # 男 男 del f.hobby # 通过__delattr__方法实现 父类object 原生支持 __delattr__ del f['hobby'] # __delitem__要通过自己实现的 print(f.__dict__)
__new__
__init__ 初始化方法
__new__ 构造方法 : 创建一个对象 传入cls参数
class A: def __init__(self): self.x = 1 print('in init function') def __new__(cls, *args, **kwargs): print('in new function') return object.__new__(A, *args, **kwargs) a1 = A()
输出:
单例模式:一个类 始终 只有 一个 实例
当你第一次实例化这个类的时候 就创建一个实例化的对象
当你之后再来实例化的时候 就用之前创建的对象