class A:
def __init__(self):
print("__init__")
super(A, self).__init__()
def __new__(cls):
print("__new__")
return super(A, cls).__new__(cls)
def __call__(self):
print("__call__")
if __name__ == "__main__":
a = A()
执行结果
__new__
__init__
1.__init__
__init__负责对象的初始化,系统执行此方法前,对象就已经存在
2.__new__
__new__方法先被调用,返回一个实例对象;接着__init__对其进行初始化
如果__new__方法不返回值,__init__将不会被调用
3.__call__
可调用对象(callable),我们平时自定义的函数、内置函数和类都属于可调用对象,但凡是可以把一对括号()应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __call__(self, friend):
print("My friend name:", friend)
if __name__ == "__main__":
p = Person("Army", 10)
p("Joy")
执行结果
My friend name: Joy
4.__len__
对于类而言,len()
函数没有办法直接计算类的长度的,因为在类中包含着众多的属性以及方法,是一种抽象的实体。
如果在类中没有定义__len__()
方法来指明程序到底该计算哪个属性的长度时,在终端我们必须采用len(对象.属性)才能得到我们想要的结果。