Как получить родительские классы класса в моем мета-классе?
У меня есть следующий скрипт:
#!/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()
Я получаю следующий вывод:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>,)
Но я ожидаю этого:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>, <class '__main__.A'>)
Где я ошибаюсь?
1 ответ
Решение
bases
список параметров базовых классов, перечисленных в определении класса.
Кажется, ты хочешь 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