【发布时间】:2013-12-16 12:43:16
【问题描述】:
我对继承和超级感到困惑。这里我写了一些代码,请看下面,
class Animal(object):
"""docstring for Animal"""
__name, __weight, __sound = ["",0,1]
def __init__(self):
super(Animal, self).__init__()
def setName(self, newName):
self.__name = newName
def getName(self):
return self.__name
class Dog(Animal):
"""docstring for Dog"""
def __init__(self):
super(Dog, self).__init__()
def setName(self, name):
self.name = "here is "+ name
def getName(self):
return self.name
if __name__ == "__main__":
fida = Dog()
fida.setName('fida')
def changeObjectName(obj):
obj.setName("Marcus")
print fida.getName()
changeObjectName(fida)
print fida.getName()
这里我观察到两个案例输出,
1 当我这样评论 Dog 类中的代码时,
class Dog(Animal):
"""docstring for Dog"""
def __init__(self):
super(Dog, self).__init__()
# def setName(self, name):
# self.name = "here is "+ name
# def getName(self):
# return self.name
我得到这样的输出:
fida
Marcus
从上面的输出中我观察到了从超类(即动物)调用的方法
2 Dog 类中的代码不加注释,
class Dog(Animal):
"""docstring for Dog"""
def __init__(self):
super(Dog, self).__init__()
def setName(self, name):
self.name = "here is "+ name
def getName(self):
return self.name
我得到了这样的输出,
here is fida
here is Marcus
从上面的输出中我观察到从子类(即狗)调用的方法
为什么setName不从超类调用而不注释Dog类中的代码?
和
请解释一下上面的代码?
【问题讨论】:
-
这其中的哪一部分让您感到惊讶?您没有表明任何您希望发生的不同情况。
-
对不起@user2357112。我已经编辑了我的代码。
-
什么?你是在问为什么,如果你不调用 super(),Python 不调用 super()?
-
您是否对为什么不自动调用继承方法感到困惑?
-
即使先调用超类方法(它们不在这里),你为什么期望结果会有所不同?它将设置
__name和name,然后读取__name和name,name是最终的返回值。
标签: python inheritance superclass