Python 中超级函数的多重继承和使用
Multiple Inheritance & Usage of Super Function In Python
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')
为什么我不能为父 class 属性赋值?比如上面的classes,为什么我不能执行下面的?
t.school # returns error
t.university #returns error
但是,以下是有效的吗?
t.name
t.age
我想实现这个,完全靠super函数。
您必须在此处为每个基 classes.See 调用构造函数:
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)
我找到了一个解决方案 - 这只依赖于使用 super 函数来初始化所有(父 class)属性。
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)
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')
为什么我不能为父 class 属性赋值?比如上面的classes,为什么我不能执行下面的?
t.school # returns error
t.university #returns error
但是,以下是有效的吗?
t.name
t.age
我想实现这个,完全靠super函数。
您必须在此处为每个基 classes.See 调用构造函数:
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)
我找到了一个解决方案 - 这只依赖于使用 super 函数来初始化所有(父 class)属性。
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)