对Python3中的OOP感到困惑:
main.py:
import ma as m1
r = m1.ma1()
r.doit()
print(r.m1avar)
print(r.m2var)
r.m2do()
ma.py:
import mb as m2
class ma1(m2.mclass2):
m1avar = 10
def doit(self):
self.logout("doit!")
def logout(self, a):
print(a+" <--- this is correct")
mb.py:
class mclass2():
m2var = 5;
m1avar = 5;
def doit(self):
super().logout("m2 do it")
def m2do(self):
super().logout("child class")
生产:
doit! <--- this is correct
10
5
Traceback (most recent call last):
File "/home/alex/Desktop/rrr/m1.py", line 8, in <module>
r.m2do()
File "/home/alex/Desktop/rrr/mb.py", line 11, in m2do
super().logout("child class")
AttributeError: 'super' object has no attribute 'logout'
如何让最低类(mclass2)访问更高类(ma1)中的方法—特别是.logout方法。
谢谢!
试试这个- mclass2不把它的父类看作super类,就像它自己一样。所以你需要的是self.
而不是super.
class mclass2():
m2var = 5;
m1avar = 5;
def doit(self):
super().logout("m2 do it")
def m2do(self):
self.logout("child class")
问题是m2不是继承自m1。换句话说,m2甚至不知道m1的存在。
你唯一能做的就是在m2对象的实例上赋值一个m1对象。我不认为这是一个好的做法。