<span style="font-size:18px;">class soldier ( object ):
def __init__ (self,weapon):
self.weapon = weapon
class marine (soldier):
def __init__ (self,weapon):
pass
mymarine = marine("gun")
print mymarine.weapon<span style="white-space:pre"> <span style="color:#ff6666;">#error:mymarine has no attribute weapon</span></span></span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> </span>
在上例中,定义了一个soldier类,又定义了一个它的子类marine类。本来以为,marine作为soldier的子类,那么soldier有的属性他都会有,所以初始化的时候什么都不用做。但事实上,这在python的语法中是错误的,至少在python2.7版本中是错的。
解决这个问题,Python2.7的思路是在子类marine初始化的时候,调用父类soldier的初始化方法将子对象本身再初始化一遍就可以了。
即:soldier.__init__(self,weapon)。代码如下:
<span style="font-size:18px;">class soldier ( object ):
def __init__ (self,weapon):
self.weapon = weapon
class marine (soldier):
def __init__ (self,weapon):
soldier.__init__(self,weapon)
mymarine = marine("gun")
print mymarine.weapon <span style="color:#ff0000;"># gun</span></span>
问题解决!