我试图弄清楚Python中的继承。我发现当我尝试从父母那里调用变量时,我只能调用变量a
和变量f
本身,以相同的方式调用方法。是什么导致了这个(如果不困难,那么我想阅读具有真正有用信息的源),是否有可能以某种方式解决这个问题,以便从所有类中调用方法和变量?
class a:
def __init__(self):
self.a = 1
class b:
def __init__(self):
self.b = 2
def b_print(self):
print(self.b)
class c:
def __init__(self):
self.c = 3
class f(a, b, c):
def __init__(self):
super().__init__()
self.f = 4
def pprint(self):
try:
print(self.a)
except:
print('a: Не обнаружено')
try:
print(self.b)
except:
print('b: Не обнаружено')
try:
print(self.c)
except:
print('c: Не обнаружено')
try:
print(self.f)
except:
print('f: Не обнаружено')
cl = f()
print(f.__mro__)
cl.pprint()
cl.b_print()
代码输出:
(<class '__main__.f'>, <class '__main__.a'>, <class '__main__.b'>, <class '__main__.c'>, <class 'object'>)
1
b: Не обнаружено
c: Не обнаружено
4
Traceback (most recent call last):
File "c:\DEV\oop\test.py", line 43, in <module>
cl.b_print()
File "c:\DEV\oop\test.py", line 10, in b_print
print(self.b)
AttributeError: 'f' object has no attribute 'b'
因为
super()
它只需要第一个父母,所以正如@splash58 指出的那样,它需要手工完成,但如果这不可能,你可以这样做: