我在理解如何从其子类访问父类的变量时遇到问题。我试图在一些有关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))
可以这样做吗?还是这是一个坏主意,并且可能在不同情况下崩溃?
您如何看待?