I have the following script:
#!/usr/bin/python3
class MyMeta(type):
def __new__(mcs, name, bases, dct):
print(name + " " + str(bases))
return super(MyMeta, mcs).__new__(mcs, name, bases, dct)
class A(metaclass=MyMeta):
def foo(self):
pass
class B(A):
pass
class C(B):
def foo(self):
pass
def main():
pass
if __name__ == "__main__":
main()
I get the following output:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>,)
But I expect it:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>, <class '__main__.A'>)
Where I make a mistake?
bases
parameter list base classes listed in the class definition.
It seems like you want class.mro
:
class MyMeta(type):
def __new__(mcs, name, bases, dct):
ret = super(MyMeta, mcs).__new__(mcs, name, bases, dct)
print(name + " " + str(ret.mro()[1:-1]))
return ret