我创建了类Employee:
class Employee:
def __init__(self,name,salary = 1500):
self.__name = name
self.__salary = salary
然后,我想定义子类教授,其薪水是员工的3 *工资。但是我需要根据超类改变我的子类的工资。
class Professor(Employee):
def __init__(self,name,salary):
Employee.__init__(self,name,salary)
self.__salary = self.__salary*3
但它给我一个错误"
__init__() missing 1 required positional argument: 'salary'"
我该如何解决这个问题?
答案 0 :(得分:3)
这是因为您已设置属性以通过为其提供__
前缀来模拟私有变量。 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
如果您想拥有教授对象的默认薪水,则需要在__init__
的{{1}}函数中明确添加:
Professor
关于继承默认参数值的问题:你不能真正这样做,因为你正在重新定义class Professor(Employee):
def __init__(self,name,salary = 1500):
Employee.__init__(self,name,salary)
self._Employee__salary = self._Employee__salary * 3
类中的__init__
(这是有意义的,因为你正在扩展它功能)。你可以用你的默认参数解决这个问题,但它不是很漂亮,我不推荐它:
Professor