0

У меня есть 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() 

я получаю следующий результат:

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 
+0

Спасибо за ответ и объяснения. – Denis

Смежные вопросы