0

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?

Denis
  • 3,595
  • 12
  • 52
  • 86

1 Answers1

1

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
falsetru
  • 357,413
  • 63
  • 732
  • 636