如何访问子类中父类的隐藏变量?

时间:2019-01-11 10:17:45

标签: python

我在理解如何从其子类访问父类的变量时遇到问题。我试图在一些有关python的电子书中得到一些答案,但是没有解释我的特殊用例。

因此,假设我在 Python 3.5.x中具有以下两个类:

class Parent:
    def __init__(self, name):
        self.__name = name
        self.__greetings = 'hallo'
        self.__concatenation = self.__greetings + self.__name

class Child(Parent):
    def __init__(self, name, old):
        super().__init__(name)
        self.__old = old

    def do_something(self):
        return '{} you are {} years old'.format(self.__concatenation, 
                                                str(self.__old))

child = Child('Frank', 28)
print(child.do_something())

为什么不是所有Java属性都继承给子类的Java?为什么不能在子类中使用该变量,无论它是否继承了父类的所有属性?

我收到以下错误代码:

Traceback (most recent call last):
  File "C:/Users/xxxxxxxx/Desktop/inheritance_test.py", line 17, in 
<module>
    print(child.do_something())
  File "C:/Users/xxxxxxxx/Desktop/inheritance_test.py", line 14, in 
do_something
    return '{} you are {} years old'.format(self.__concatenation, 
    str(self.__old))
AttributeError: 'Child' object has no attribute '_Child__concatenation'

在Jav中,如果类继承私有变量,则它可以访问它。在Python中如何工作?

如果我在Parent类返回中创建一个吸气剂,例如vairable __concatenation,我可以在do_something函数中访问vairable。 但是我认为这不是在python中处理此问题的正确方法。 看起来不是pythonic!

我们将getter方法添加到父类并在子类中调用它:

class Parent:
    #same code as above
    def getConcatenationString(self):
        return self.__concatenation

将子类中的方法更改为此吗?

def do_something(self):
    return '{}...{}...'.format(self.getConcatenationString(), 
                               str(self.__old))

可以这样做吗?还是这是一个坏主意,并且可能在不同情况下崩溃?

您如何看待?

0 个答案:

没有答案