打印SuperClass中的所有SubClass和SubClass中的所有SuperClass

Zer*_*ays 0 python

我想在SuperClass中打印所有子类,并在子类中打印所有SuperClasses:

class SuperClass():
    def Print(self):
        print('my sub classes are : ')
        #print all childs

class Sub1(SuperClass,...):
    def Print(self):
        print('My parents are :')
        #print all SuperClasses

class Sub2(SuperClass,...):
    def Print(self):
        print('My parents are :')
        #print all SuperClasses
Run Code Online (Sandbox Code Playgroud)

SuperClass有Print打印所有继承的类,Sub有Print打印方法打印所有的SuperClasses.怎么办?

Mar*_*ers 5

Python类有三个属性可以帮助:

  • class.__subclasses__(); 一个返回该类的所有子类的方法.

  • class.__bases__,当前类的直接父类的元组.

  • class.__mro__,一个包含当前类层次结构中所有类的元组.在该元组中查找当前的类对象,后面的所有内容都是父类,直接或间接.

使用这些给出:

class SuperClass(object):
    def print(self):
        print('my sub classes are:', ', '.join([
            cls.__name__ for cls in type(self).__subclasses__()]))

class Sub1(SuperClass):
    def print(self):
        print('My direct parents are:', ', '.join([
            cls.__name__ for cls in type(self).__bases__]))
        all_parents = type(self).__mro__
        all_parents = all_parents[all_parents.index(Sub1) + 1:]
        print('All my parents are:', ', '.join([
            cls.__name__ for cls in all_parents]))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> SuperClass().print()
my sub classes are: Sub1
>>> Sub1().print()
My direct parents are: SuperClass
All my parents are: SuperClass, object
Run Code Online (Sandbox Code Playgroud)