面向对象中除了__init__之外还有很多特殊方法
1.__init__ :数据初始化,当类名()进行调用的时候会自动执行
class ms(object): def __init__(self,a1,a2): self.a1=a1 self.a2 = a2 obj = ms(12,34)
2.__call__:对象() 自动执行 __call__,有返回值
class ms(object): def __call__(self, *args, **kwargs): print(666,args,kwargs) return 123 ret = obj(2,3,4,k=234) <<<< 666 (2, 3, 4) {'k': 234}
3.__getitem__ / __setitme__ / __delitme__
主要用于索引操作
class ms(object): def __getitem__(self, item): # 获取 print(item) return 8 def __setitem__(self, key, value): #设置 print(key,value,1234) def __delitem__(self, key): # 删除 print(key) obj = ms(1,2) ret = obj["666"] #对象["..."] 自动执行 obj["k1"]="123" # 对象[" "]=11 自动执行 无返回值 del obj["123"] # del 对象[' '] 自动执行 无返回值
6.__add__ 对象+对象
class ms(object): def __init__(self,a1,a2): self.a1=a1 self.a2 = a2 def __add__(self, other): return self.a1 + other.a2 obj1 = ms(2,4) obj2 = ms(44,55) ret = obj1+obj2 # 对象+对象 自动执行 print(ret) <<<<57
7.__enter__ 和 __exit__
class ms(object): def __enter__(self): print(111) return 999 def __exit__(self, exc_type, exc_val, exc_tb): print(222222) #with 对象 自动执行 __enter__ / __exit__ 这两个要用就要一起用 with ms(2,3) as f: # 这里的as 接收的是返回值 print(f) print(1234) <<<< 111 999 1234 222222
8.__new__ : 真正的构造方法 在执行__init__ 之前会执行__new__创建一个空的对象
class ms(object): def __init__(self,a1,a2): # 初始化方法 self.a1=a1 self.a2 = a2 def __new__(cls, *args, **kwargs): # 构造方法 print(2) return object.__new__(cls) # python 内部创建一个当前类的对象(初创时内部是空的) obj = ms(1,2) print(obj.a1) <<<< 2 1
9.__str__
class ms(object): def __str__(self): 当一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值 return "display" obj = ms() print(obj) <<< display
10.__doc__
用于查看类的文档信息(类的注释)
class foo(object): """ 人生苦短我用python """ def func(self): pass print(foo.__doc__) <<<< 人生苦短我用python
11.__dict__
查看类或对象里的所有成员
class foo(object): county = "China" def __init__(self): self.num = 12 self.age = 20 print(foo().__dict__) # 查看对象里的所有成员 print(foo.__dict__) # 查看类里的所有成员
12.__iter__
如果需要对象可循环就要在类里面加
class foo(object): county = "China" def __init__(self,num): self.num = num def __iter__(self): return iter(self.num) obj = foo([11,22,33,55,66]) for item in obj: print(item)