发生这种情况是因为您已将属性设置为通过为私有变量提供__ 前缀来模拟私有变量。 Python 会破坏这些变量,使它们难以从其他类中访问。您可以通过不将它们设为“私有”来轻松解决您的问题:
class Employee:
def __init__(self,name,salary = 1500):
self.name = name
self.salary = salary
class Professor(Employee):
def __init__(self,name,salary):
Employee.__init__(self,name,salary)
self.salary = self.salary * 3
如果您出于某种原因确实需要将它们设为“私有”变量,您可以像这样在子类中访问它们:self._Employee__salary
class Employee:
def __init__(self,name,salary = 1500):
self.__name = name
self.__salary = salary
class Professor(Employee):
def __init__(self,name,salary):
Employee.__init__(self,name,salary)
self._Employee__salary = self._Employee__salary * 3
如果你想为你的 Professor 对象设置一个默认薪水,你需要在 Professor 的 __init__ 函数中显式添加它:
class Professor(Employee):
def __init__(self,name,salary = 1500):
Employee.__init__(self,name,salary)
self._Employee__salary = self._Employee__salary * 3
关于继承默认参数值的问题:你不能真正做到,因为你在你的Professor 类中重新定义__init__(这是有道理的,因为你正在扩展它的功能)。你可以用你的默认参数以某种方式解决这个问题,但它不是很漂亮,我不推荐它:
class Employee:
def __init__(self,name,salary):
self.__name = name
if salary == None:
self.__salary = 1500
else:
self.__salary = salary
class Professor(Employee):
def __init__(self,name,salary = None):
Employee.__init__(self,name,salary)
self._Employee__salary = self._Employee__salary * 3