【问题标题】:print all SubClass in a SuperClass and all SuperClass in a SubClass打印超类中的所有子类和子类中的所有超类
【发布时间】:2015-08-31 09:20:52
【问题描述】:

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

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

SuperClass 有 Print 打印所有继承自 的类,Sub 有 Print 打印他所有 SuperClasses 的方法。怎么做?

【问题讨论】:

标签: python


【解决方案1】:

Python 类的三个属性在这里有所帮助:

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

  • class.__bases__,当前类的direct父类的元组。

  • 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]))

演示:

>>> SuperClass().print()
my sub classes are: Sub1
>>> Sub1().print()
My direct parents are: SuperClass
All my parents are: SuperClass, object

【讨论】:

  • 我在浏览代码导师,我在里面看到了你 Martjin。这太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 2014-03-23
  • 1970-01-01
  • 2012-08-20
相关资源
最近更新 更多