gpt4 book ai didi

python - 混淆继承与Python中的super关键字?

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:29 25 4
gpt4 key购买 nike

我对继承和 super 感到困惑。这里我写了一些代码,请看下面,

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

从上面的输出中,我观察到从父类(super class)(即 Animal)调用的方法

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

从上面的输出中,我观察到了从子类(即 Dog)调用的方法

为什么setName不从父类(super class)调用而不注释 Dog 类中的代码?

请解释一下上面的代码?

最佳答案

示例 1

当您使用实际对象中不存在的成员对象时,Python 会沿着继承阶梯向上查找匹配的成员。如果找到,它将根据执行的操作返回/执行它。如果在任何父级中也没有找到它,它将失败并出现错误。

示例 2

当父对象和子对象都有同名的方法,并且使用子对象调用该方法时,将首先搜索子对象,如果找到匹配项,它将根据执行的操作。基本上,子对象中的方法会隐藏父对象中的方法。

关于python - 混淆继承与Python中的super关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20611246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com