Professor's answer to Python homework will not run: TypeError: __init__() missing 1 required positional argument: 'gender'
Professor's answer to Python homework will not run: TypeError: __init__() missing 1 required positional argument: 'gender'
我确定之前有人问过这个问题,但我还没有达到可以理解其他问题如何回答我的水平。有人可以解释这段代码的问题吗?我看不到它:
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
需要改的是classEmployee
中对Person.__init__(name, age, gender)
的调用,定义上是def __init__(self, name, age, gender):
您的正确密码是-
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__(self, 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))
这会给你你的输出-
George's info is: Name is George, Age is 30, Gender is Male, Title is Manager, and Salary is 50000
更改此行:
Person.__init__(name, age, gender)
至:
Person.__init__(self, name, age, gender)
说明:Person.__init__
方法有四个参数,第一个是被初始化对象的self
参数。通常,self
参数的特殊之处在于它会自动获取调用该方法的对象的值。但是,由于 Person
是 class,而不是对象,在这种情况下,该方法不是在对象上调用的,因此 self
参数必须作为显式参数传递。
这样写比较正常:
super().__init__(name, age, gender)
这看起来有点奇怪,但它避免了不必要地第二次写父 class 的名字,并且当 class 有两个 superclass 时它可以正常工作.
我确定之前有人问过这个问题,但我还没有达到可以理解其他问题如何回答我的水平。有人可以解释这段代码的问题吗?我看不到它:
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
需要改的是classEmployee
中对Person.__init__(name, age, gender)
的调用,定义上是def __init__(self, name, age, gender):
您的正确密码是-
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__(self, 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))
这会给你你的输出-
George's info is: Name is George, Age is 30, Gender is Male, Title is Manager, and Salary is 50000
更改此行:
Person.__init__(name, age, gender)
至:
Person.__init__(self, name, age, gender)
说明:Person.__init__
方法有四个参数,第一个是被初始化对象的self
参数。通常,self
参数的特殊之处在于它会自动获取调用该方法的对象的值。但是,由于 Person
是 class,而不是对象,在这种情况下,该方法不是在对象上调用的,因此 self
参数必须作为显式参数传递。
这样写比较正常:
super().__init__(name, age, gender)
这看起来有点奇怪,但它避免了不必要地第二次写父 class 的名字,并且当 class 有两个 superclass 时它可以正常工作.