我的代码如下:
class Parent():
def __init__(self,name):
self.name = name
def printing(self):
print(self.name)
class Child (Parent):
def __init__(self,name,country):
Parent.name = 'Roger'
self.name = name
self.country = country
def Output(self):
print(Parent.name,self.name,self.country)
obj = Child('Rafael','France')
现在,obj.Output()
返回:Roger Rafael France
和obj.printname()
返回:Rafael
有人可以解释为什么分配Parent.name = 'Roger'
没有在父类中更改它吗?想要了解为什么`Parent.name'没有被覆盖。
答案 0 :(得分:1)
因为obj = Child('Rafael','France')
是类Child
的实例并且在行中:
Parent.name = 'Roger'
self.name = name
您使用您在构造函数中设置的实例self.name = name
的名称覆盖Roger的名称。
要按照您想要的方式工作,代码应如下所示:
class Parent():
def __init__(self,name):
self.name = name
def printing(self):
print(self.name)
class Child (Parent):
def __init__(self,name,country):
self.name = name
Parent.name = 'Roger' # but this is awful
self.country = country
obj = Child('Rafael','France')
obj.printing()
> Roger
答案 1 :(得分:1)
当您在Child的init中创建自己的self.name时,您隐藏了对Parent的self.name的引用。
您要做的是调用Parent的构造函数:How to invoke the super constructor?
然后,像这样访问它: Access parent class instance attribute from child class instance?