Python 如何使用多个init继承实现super()?

Python 如何使用多个init继承实现super()?,python,python-3.x,inheritance,super,Python,Python 3.x,Inheritance,Super,我在做一个练习,涉及到初始化器的多个继承,这些初始化器需要多个参数,我想,super()如何解决这个问题,而不是手动调用每个超类 第一类: 定义初始化(自我、地址、电话): self.address=地址 self.phone=电话 第二类: 定义初始(自我,城市): self.city=城市 三班(一、二): 定义初始(自我、国家、地址、电话、城市): self.country=国家 一个.uuu初始化(自我、地址、电话) 两个。uuuu init_uuuuuuuuuuuuuuuuuuuuu

我在做一个练习,涉及到初始化器的多个继承,这些初始化器需要多个参数,我想,super()如何解决这个问题,而不是手动调用每个超类


第一类:
定义初始化(自我、地址、电话):
self.address=地址
self.phone=电话
第二类:
定义初始(自我,城市):
self.city=城市
三班(一、二):
定义初始(自我、国家、地址、电话、城市):
self.country=国家
一个.uuu初始化(自我、地址、电话)
两个。uuuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
打印(f“{address},”+f“{phone},”+f“{self.city},”+f“{self.country}”)
i=3(“国家”、“地址”、“失语”、“种族”)
这很好,所有参数都按顺序打印,但我不知道如何在这里实现
super()

我尝试在子类上添加2个超级:

super()
超级()。\uuuu初始\uuuuuu(城市)
甚至在父类上添加一个super(),使其指向
类2

一级:
定义初始(自我、地址、电话、城市):
self.address=地址
self.phone=电话
超级()。\uuuu初始\uuuuuu(城市)
第二类:
定义初始(自我,城市):
self.city=城市
三班(一、二):
定义初始(自我、国家、地址、电话、城市):
self.country=国家
super()。\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
打印(f“{address},”+f“{phone},”+f“{self.city},”+f“{self.country}”)
i=3(“国家”、“地址”、“失语”、“种族”)
它不起作用

如何在运行的原始代码中实现
super()。他建议将参数作为关键字参数传递,并在每个
的末尾调用
super()

class One:
    def __init__(self, address, phone, **kwargs):
        self.address = address
        self.phone = phone
        super().__init__(**kwargs)

class Two:
    def __init__(self, city, **kwargs):
        self.city = city
        super().__init__(**kwargs)

class Three(One,Two):
    def __init__(self, country, address, phone, city, **kwargs):
        self.country = country
        super().__init__(address=address, phone=phone, city=city, **kwargs)
        print(f"{address}, " + f"{phone}, " + f"{self.city}, " + f"{self.country}")

i = Three("Acountry", "AnAddress", "Aphone", "Acity")
您应该阅读,其中介绍了
super
的工作原理,并概述了使用它的类的外观。他建议将参数作为关键字参数传递,并在每个
的末尾调用
super()

class One:
    def __init__(self, address, phone, **kwargs):
        self.address = address
        self.phone = phone
        super().__init__(**kwargs)

class Two:
    def __init__(self, city, **kwargs):
        self.city = city
        super().__init__(**kwargs)

class Three(One,Two):
    def __init__(self, country, address, phone, city, **kwargs):
        self.country = country
        super().__init__(address=address, phone=phone, city=city, **kwargs)
        print(f"{address}, " + f"{phone}, " + f"{self.city}, " + f"{self.country}")

i = Three("Acountry", "AnAddress", "Aphone", "Acity")

请参考一个建议:
Three.\uuuu init\uuuuu
如果在实例化
Three
时使用关键字参数,则不必重复
地址
电话
城市
参数。(您可以通过设置所有三个纯关键字参数来强制使用关键字参数。)谢谢您的回答!有没有一种不用args和kwargs就能解决这个问题的方法?最初,这个例子是为了强调没有args和kwargs的继承是多么复杂。另外,类2上的super()将调用哪个类?默认的对象类?一个建议:
Three.\uuuu init\uuuuu
如果在实例化
Three
时使用关键字参数,则不必复制
地址
电话
城市
参数。(您可以通过设置所有三个纯关键字参数来强制使用关键字参数。)谢谢您的回答!有没有一种不用args和kwargs就能解决这个问题的方法?最初,这个例子是为了强调没有args和kwargs的继承是多么复杂。另外,类2上的super()将调用哪个类?默认的对象类?