献给莹莹
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











网友评论