【问题标题】:Multiple Inheritance & Usage of Super Function In PythonPython中超级函数的多重继承和使用
【发布时间】:2020-02-29 11:43:14
【问题描述】:
class Test:

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

class Test1:

    def __init__(self, school, university):
        self.school = school
        self.university = university

    def get(self):
        print('josh')

class Test2(Test,Test1):

    def __init__(self, name1, age1, school1, university1):
        super().__init__(name = name1, age = age1 , school = school1,  university = university1)


t = Test2('john', 16, 'Harvard', 'Yale')

为什么我不能为父类属性赋值?例如,对于上述课程,为什么我不能执行以下?

t.school # returns error 
t.university #returns error

但是,以下是有效的吗?

t.name
t.age

我想实现这个,完全依赖super函数。

【问题讨论】:

    标签: python-3.x multiple-inheritance superclass


    【解决方案1】:

    您必须为每个基类调用构造函数。请参见此处:

    class Test:
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    class Test1:
    
        def __init__(self, school, university):
            self.school = school
            self.university = university
    
        def get(self):
            print('josh')
    
    class Test2(Test,Test1):
    
        def __init__(self, name1, age1, school1, university1):
            Test.__init__(self, name1, age1)
            Test1.__init__(self, school1, university1)
    
    
    t = Test2('john', 16, 'Harvard', 'Yale')
    print(t.name)
    print(t.age)
    print(t.school)
    print(t.university)
    

    【讨论】:

    • 您好 Juan David,感谢您的回答。我对上述内容很熟悉,但是有没有办法使用超级函数来代替?
    • @Levis1 为什么只需要依赖super函数?
    • 其实没有什么特别的原因。只是想更好地理解这个超级函数在 Python 中是如何工作的。在这种情况下,您的方法要简洁得多-我理解。
    【解决方案2】:

    我找到了一个解决方案——这只是依赖于使用超级函数来初始化所有(父类)属性。

       class Test:
    
            def __init__(self, name, age, **kwargs):
                self.name = name
                self.age = age
                super().__init__(**kwargs)
    
        class Test1:
    
            def __init__(self, school, university, **kwargs):
                self.school = school
                self.university = university
                super().__init__(**kwargs)
    
            def get(self):
                print('josh')
    
        class Test2(Test,Test1):
    
            def __init__(self, name1, age1, school1, university1, **kwargs):
                kwargs['name'] = name1
                kwargs['age'] = age1
                kwargs['school'] = school1
                kwargs['university'] = university1
                super().__init__(**kwargs)
    
        t = Test2('john', 16, 'Harvard', 'Yale')
        print(t.name)
        print(t.age)
        print(t.school)
        print(t.university)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-22
      • 2016-09-03
      • 2016-06-30
      • 1970-01-01
      • 2012-07-06
      • 2014-09-02
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多