在Python,认为变量名(如self
)为 “指着” 或 “参考” 的值。当您的B
一个实例:
b = B(2)
的B.__init__
方法被调用变量self
已分配到的B
的早期实例。现在,这种方法中,当Python的达到
self = A(x)
变量self
被重新分配到的A
一个新的实例。 B
的实例仍然存在; self
只是不再指向它。
请注意,self
是一个类似于Python中的其他变量。 (self
不是关键字,它只是一个约定的方法的第一个参数叫self
)
顺便说一句,与x
值初始化self
,使用
class B(A):
def __init__(self,x):
A.__init__(self, x) # <-- Note the x
print "constructing B"
self.printx()
然后
b = B(2)
b.printx()
产生
constructing A
constructing B
x = 2
x = 2
当一个类有一个可选的构造,如getA
,Python中的典型模式是使用类方法:
class A(object):
def __init__(self, x=0):
print "constructing A"
self.x = x
def printx(self):
print "x =",self.x
@classmethod
def getA(cls, x):
print('constructing getA')
self = cls(x)
self.y = 1
return self
现在做的A
实例与类方法getA
,你倒是说
a = A.getA(x)
类A
被作为第一个参数的类方法getA
,和STOR传递编辑变量cls
。
什么是美丽大约做这种方式(而不是使用工厂函数getA
)是,如果你继承A
这样的:
class B(A):
def __init__(self,x):
A.__init__(self, x)
print "constructing B"
self.printx()
那么你可以使用getA
类方法是使B
实例好:
b = B.getA(2)
产生
constructing getA
constructing A
constructing B
x = 2
和
print(type(b))
print(b.y)
产生
<class '__main__.B'> # b is an instance of B
1 # showing the y attribute has been set.
究竟是你想怎么办?即你的预期产出是什么? –