1

Are there any side-effects of adding grandparent to the MRO? Purpose is I would like to get grandchildren classes by using grandparent.__subclasses__()

class A(object):
    def work(self):
        print 'A'


class B(A):
    def work(self):
        print 'B'
        super(B, self).work()


class C(B):
    def work(self):
        print 'C'
        super(C, self).work()

class D(B, A):
    def work(self):
        print 'D'
        super(D, self).work()

>>> C().work()
C
B
A
>>> D().work()
D
B
A
>>> A.__subclasses__()
[<class 'test.B'>, <class 'test.D'>]
James Lin
  • 25,028
  • 36
  • 133
  • 233

1 Answers1

0

We have come up a recursive function to work out the subclasses

def get_all_subclasses(cls):
    all_subclasses = []

    for subclass in cls.__subclasses__():
        all_subclasses.append(subclass)
        all_subclasses.extend(get_all_subclasses(subclass))

    return all_subclasses
James Lin
  • 25,028
  • 36
  • 133
  • 233