献给莹莹
1. __init__
方法
-
__init__
方法负责对象的初始化,当类被创建时,__init__
默认被执行了,因此__init__
方法可以用来做一些初始化工作。
2. __new__
方法
class A:
def __init__(self):
print("__init__ ")
print(self)
super(A, self).__init__()
def __new__(cls):
print("__new__ ")
self = super(A, cls).__new__(cls)
print(self)
return self
A()
__new__
方法先被调用,返回一个实例对象,这个实例对象会传递给__init__
方法中定义的 self 参数,以便实例对象可以被正确地初始化。如果
__new__
方法不返回值(或者说返回 None)那么__init__
将不会得到调用,这个也说得通,因为实例对象都没创建出来,调用 init 也没什么意义。__init__
方法中除了self之外定义的参数,都将与__new__
方法中除cls参数之外的参数是必须保持一致或者等效。此外,python 还规定,
__init__
只能返回 None 值
3. __call__
方法
- 对象通过提供
__call__ (self, [,*args [,**kwargs]])
方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...)
等同于调用x.__call__(self, arg1, arg2)
。 - 例如:
class DistanceForm(object):
def __init__(self, origin):
self.origin = origin
print "origin :"+str(origin)
def __call__(self, x):
print "x :"+str(x)
p = DistanceForm(100)
p(2000)
输出为:
origin :100
x :2000