自定义方法汇总
| 分类 |
方法 |
说明 |
作用 |
| 基本 |
__new__(cls[, ...]) |
创建对象的方法,当通过类去创建对象时就是调用new方法去创建的 |
单例模式 |
| 基本 |
__init__(self[, ...]) |
初始化方法,当实例被创建的时候调用的初始化方法 |
|
| 基本 |
__del__(self) |
析构方法,当实例被销毁的时候调用的方法 |
|
| 基本 |
__call__(self[, args...]) |
类装饰器,允许一个类的实例像函数一样被调用:x(a, b) 调用 x.call(a, b) |
|
| 容器类型数据 |
__len__(self) |
定义当被 len() 调用时的行为(返回容器中元素的个数) |
|
| 容器类型数据 |
__contains__(self, item) |
定义当使用成员测试运算符(in 或 not in)时的行为 |
|
__new__(cls[, ...])可用单例模式
class Dog(): # 优先级1 # 单例模式(只能创建一个) # 音乐播放 对象(同时播一首歌) # 回收站 对象(同时都扔到一个垃圾桶) # 打印机 对象(同时打一份) instance = None # 记录第一个被创建对象的引用 init_flag = False # 记录是否执行过初始化动作 def __new__(cls, *args, **kwargs): if cls.instance is None: # 1. 判断类属性是否已经被赋值 cls.instance = super().__new__(cls) return cls.instance # 2. 返回类属性的单例引用 # 必须返回一个对象,否则不跑__new__()方法 def __init__(self, name): self.name = nameif __name__ == "__main__": my_dog_1 = Dog('A') print(my_dog_1) my_dog_1.color = "yellow" print(my_dog_1.name) my_dog_2 = Dog('B') print(my_dog_2) print(my_dog_2.name) print(my_dog_2.color) # 修改了my_dog_1,但是my_dog_2也被修改了
<__main__.Dog object at 0x7f95802d9a50>A<__main__.Dog object at 0x7f95802d9a50>Byellow
__init__(self[, ...])
class Dog(): def __init__(self, name): self.name = nameif __name__ == "__main__": my_dog_1 = Dog('A') print(my_dog_1) print(my_dog_1.name) my_dog_2 = Dog('B') print(my_dog_2) # 2个的内存空间不一样 print(my_dog_2.name)
<__main__.Dog object at 0x7fb640219e50>A<__main__.Dog object at 0x7fb640219d90>B
__del__(self)
class Dog(): def __init__(self, name): self.name = name # 对象被删除(内存删除了)后会用 # del my_dog # 出个告警? def __del__(self): print("__del__方法被调用")if __name__ == "__main__": my_dog_1 = Dog('A') print(my_dog_1) print(my_dog_1.name)
<__main__.Dog object at 0x7fbf28219e90>A__del__方法被调用
__call__(self[, args...])
class Dog(): def __init__(self, name): self.name = name # 可以让my_dog成为可调用对象 # my_dog('W', 6) def __call__(self,age): self.age = age print("调用__call__()方法",age)if __name__ == "__main__": my_dog_1 = Dog('A') my_dog_1(23) print(my_dog_1.age)
调用__call__()方法 2323
__len__(self)长度
class Dog_1(object): def __init__(self, age): self.age = age self.li = ['a', 'v', 's']class Dog(object): def __init__(self, age): self.age = age self.li = ['a', 'v', 's'] def __len__(self): return len(self.li)U = Dog(12)print(len(U)) # 3U = Dog_1(12)print(len(U)) # 'Dog_1' has no len()
__contains__(self, item)是否包含
class Student(): def __init__(self,name): self.name=name def __contains__(self,item): return item in self.names=Student("Jack")print("J" in s)## True