自定义方法汇总
分类 |
方法 |
说明 |
作用 |
基本 |
__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 = name
if __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>
B
yellow
__init__(self[, ...])
class Dog():
def __init__(self, name):
self.name = name
if __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__()方法 23
23
__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)) # 3
U = 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.name
s=Student("Jack")
print("J" in s)
## True