教授对Python作业的回答将无法运行:TypeError:__init __()缺少1个必需的位置参数:'gender'

问题描述 投票:0回答:2

我确定以前已经问过这个问题,但是目前我还不了解其他问题是如何回答我的。有人可以用此代码解释问题吗?我看不到它:

class Person:
    name = ''
    age = 0
    gender = ''

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender


class Employee(Person):
    title = ''
    salary = 0

    def __init__(self, name, age, gender, title, salary):
        Person.__init__(name, age, gender)
        self.title = title
        self.salary = salary


George = Employee("George", 30, "Male", "Manager", 50000)
print("George's info is: Name is %s, Age is %d, Gender is %s, Title is %s, and Salary is %d" % (
George.name, George.age, George.gender, George.title, George.salary))

PyCharm中返回的错误是:

Traceback (most recent call last):
  File "/Users/Sam/PycharmProjects/HW7/HW7-q2_Profs-Solution.py", line 22, in <module>
    George = Employee("George", 30, "Male", "Manager", 50000)
  File "/Users/DrewAndMon/PycharmProjects/HW7/HW7-q2_Profs-Solution.py", line 17, in __init__
    Person.__init__(name, age, gender)
TypeError: __init__() missing 1 required positional argument: 'gender'

Process finished with exit code 1
oop python-3.6
2个回答
2
投票

更改此行:

        Person.__init__(name, age, gender)

至:

        Person.__init__(self, name, age, gender)

说明:Person.__init__方法采用四个参数,其中第一个是要初始化的对象的self参数。通常,self参数是特殊的,因为它会自动获取调用该方法的对象的值。但是,由于Person是类,而不是对象,因此在这种情况下,不会在对象上调用该方法,因此self参数必须作为显式参数传递。

将其写为:

        super().__init__(name, age, gender)

这看起来有点陌生,但是它避免了不必要地再次写入父类的名称,并且当一个类具有两个超类时,它可以正常工作。


0
投票

需要更改的是对Person.__init__(name, age, gender)类中的Employee的调用,定义为def __init__(self, name, age, gender):您的正确代码是-

© www.soinside.com 2019 - 2024. All rights reserved.