一、__call__方法
class A():
def __call__(self, *args, **kwargs):
print("我的名字叫做中南毛毛虫")
# 于是便可以进行以下的操作:
mkc = A()
mkc()
A()()
二、__len__方法
class Class():
def __init__(self, name):
self.name = name
self.student = []
def __len__(self):
return len(self.student)
py2020 = Class('python_2020')
print(len(py2020)) #0
py2020.student.append('messi')
print(len(py2020)) #1
py2020.student.append('mkc')
print(len(py2020)) #2
三、__new__方法
作用:实例化时,开辟对象的内存空间,重新__new__方法,可以实现例如:单例模式
class Person():
flag = None
def __new__(cls, *args, **kwargs):
print("重写子类的__new__方法")
if cls.flag == None:
cls.flag = super().__new__(cls)
return cls.flag
def __init__(self, name, birth):
self.name = name
self.birth = birth
p1 = Person('mkc', 1993)
print(p1.name) #mkc
p2 = Person('xyy', 1994)
print(p1.name) #xyy
print(p2.name) #xyy
四、__str__方法
class Person():
def __init__(self, name, birth):
self.name = name
self.birth = birth
# 只能返回str类型数据
def __str__(self):
return f'此人的名字为{self.name},生日为{self.birth}'
p1 = Person('messi', 1987)
# 运用场景一:直接打印对象
print(p1)
# 运用场景二:运用在%s拼接
print("刚刚创建了一个Person对象,%s"%(p1))
# 运用场景二:运用在str(p1)
print(str(p1))
五、__eq__方法、__lt__方法、__gt__方法
重写=、>、<的魔法方法
import time
class Person():
def __init__(self, name, birth):
self.name = name
self.birth = birth
@property
def age(self):
return time.localtime().tm_year - self.birth
def __eq__(self, other):
return self.name==other.name and self.age == other.age
def __lt__(self, other):
return self.age > other
def __gt__(self, other):
return self.age < other
p1 = Person('mkc', 1994)
p2 = Person('mkc', 1990)
p3 = Person('mkc', 1994)
p4 = Person('xyy', 1993)
print(p1 == p2)
print(p1 == p3)
print(p1 > p2)
print(p1 < p2)