我有以下代码:
class Character:
def __init__(self):
self.__name = "test"
class Warrior(Character):
def __init__(self):
super().__init__()
def getName(self):
print(self.__name)
a = Warrior()
a.getName()
当我运行代码时,出现以下错误:
Traceback (most recent call last):
File "d:/Coding Files/lear-tsc/app.py", line 15, in <module>
a.getName()
File "d:/Coding Files/lear-tsc/app.py", line 11, in getName
print(self.__name)
AttributeError: 'Warrior' object has no attribute '_Warrior__name'
如何摆脱这个错误?
通常,当查看其他编程语言(C ++)时,派生类无法访问私有成员。我想您正在寻找受保护的成员。
无论哪种方式,Python都没有真正的私有变量。如果您明确要求成员,则始终可以访问它。例如,在您的代码上-
class Character:
def __init__(self):
self.__name = "test"
class Warrior(Character):
def __init__(self):
super().__init__()
def getName(self):
print(self._Character__name)
a = Warrior()
a.getName()
结果将是:
test
并且可以在子类外部执行相同的操作。当然,这种行为应该避免。由于您仍然依赖于用户的良好行为,因此我建议您也依赖于Pythonic代码约定,并将其转变为“受保护的”成员:
class Character:
def __init__(self):
self._name = "test"
class Warrior(Character):
def __init__(self):
super().__init__()
def getName(self):
print(self._name)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句