大家好吗?我面临这个问题:我想获得2个类的所有方法和属性,如下面的示例
class Person1:
def __init__(self) -> None:
self.john_name = "John"
self.john_age = 36
def get_name_john(self) -> str:
return self.john_name
def get_age_john(self) -> int:
return self.john_age
class Person2:
def __init__(self) -> None:
self.ted_name = "Ted"
self.ted_age = 32
def get_name_ted(self) -> str:
return self.ted_name
def get_age_ted(self) -> int:
return self.ted_age
class Student(Person1, Person2):
def __init__(self) -> None:
super().__init__()
print(self.john_age)
print(self.ted_age)
print(self.get_name_john())
print(self.get_name_ted())
print(self.get_age_john())
print(self.get_age_ted())
student = Student()
但当我这样做的时候,我无法访问《人物异闻录2》中的任何内容。也许有人能帮我?感谢您的关注。
您还需要将super().__init__()
添加到Person1
和Person2
。这是因为方法解析顺序(MRO(。
当在Student
类中调用__init__()
时,解析__init__()
的顺序如下:
Student -> Person1 -> Person2
因为__init__()
只被调用一次,所以您只能访问层次结构中的Person1
。
将super().__init__()
添加到Person1
和Person2
之后:
class Person1:
def __init__(self) -> None:
self.john_name = "John"
self.john_age = 36
super().__init__()
def get_name_john(self) -> str:
return self.john_name
def get_age_john(self) -> int:
return self.john_age
class Person2:
def __init__(self) -> None:
self.ted_name = "Ted"
self.ted_age = 32
super().__init__()
def get_name_ted(self) -> str:
return self.ted_name
def get_age_ted(self) -> int:
return self.ted_age
class Student(Person1, Person2):
def __init__(self) -> None:
super().__init__()
print(self.john_age)
print(self.ted_age)
print(self.get_name_john())
print(self.get_name_ted())
print(self.get_age_john())
print(self.get_age_ted())
代码现在可以工作了。