Python - 在派生类中重新分配父属性

时间:2017-11-10 15:14:53

标签: python class inheritance

我的代码如下:

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'没有被覆盖。

2 个答案:

答案 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?