Person.py
class Person:
def __init__(self, pname):
self.name = pname
@classmethod
def parse(cls, name):
return cls(name)
Employee.py
class Employee(Person):
def __init__(self, ename, esalary):
super().__init__(ename)
self.salary = esalary
@classmethod
def parse(cls, data):
person = super().parse(data["name"])
person.salary = data["salary"]
return person
Customer.py
class Customer(Person):
def __init__(self, ename, country):
super().__init__(ename)
self.country = country
@classmethod
def parse(cls, data):
person = super().parse(data["name"])
person.country = data["country"]
return person
main.py
emp_data = {
"name": "john",
"salary": 1000
}
emp = Employee.parse(emp_data)
print(type(emp))
print(emp.name)
print(emp.salary)
cust_data = {
"name": "peter",
"country": "USA"
}
cust = Customer.parse(cust_data)
print(type(cust))
print(cust.name)
print(cust.country)
ошибка
TypeError Traceback (most recent call last)
<ipython-input-32-a5abd51d9870> in <module>()
36 "salary": 1000
37 }
---> 38 emp = Employee.parse(emp_data)
39 print(type(emp))
40 print(emp.name)
<ipython-input-32-a5abd51d9870> in parse(cls, data)
14 @classmethod
15 def parse(cls, data):
---> 16 person = super().parse(data["name"])
17 person.salary = data["salary"]
18 return person
<ipython-input-32-a5abd51d9870> in parse(cls, name)
5 @classmethod
6 def parse(cls, name):
----> 7 return cls(name)
8
9 class Employee(Person):
TypeError: __init__() missing 1 required positional argument: 'esalary'
Этот пример просто для воспроизведения проблемы в реальном коде. Фактические функции анализа включают сложную логику.
В приведенном выше примере классы Employee
и Customer
расширяют класс Person
. Согласно ошибке, метод init
класса Person
, который вызывается parse
из того же класса, ожидает esalary
. Но у метода Person
init нет свойства esalary
.
Что не так с моей программой? Я думаю, что не правильно понял наследование. Пожалуйста, поправьте меня. Прежде всего, правильно ли я структурировал свою программу?