Python上的多重继承



大家好吗?我面临这个问题:我想获得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__()添加到Person1Person2。这是因为方法解析顺序(MRO(。

当在Student类中调用__init__()时,解析__init__()的顺序如下:

Student -> Person1 -> Person2

因为__init__()只被调用一次,所以您只能访问层次结构中的Person1

super().__init__()添加到Person1Person2之后:

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())

代码现在可以工作了。

最新更新