【问题标题】:Any difference in adding grandparent into MRO in python?在 python 中将祖父母添加到 MRO 有什么区别?
【发布时间】:2015-06-09 21:42:45
【问题描述】:

将祖父母添加到 MRO 是否有任何副作用?目的是我想通过使用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'>]

【问题讨论】:

  • 副作用是什么意思?您可以通过检查 A.__subclasses__() 中每个条目的 MRO 来确定孙子。
  • “将祖父母添加到 MRO”是什么意思?
  • @user2357112 class D(B, A):
  • @SimeonVisser 如果您不知道C 的存在,您将如何检查每个孙子。 A.__subclasses__() 只返回直接子代。
  • 广度优先搜索。继续在子类上调用__subclasses__,直到触底。

标签: python python-mro


【解决方案1】:

我们提出了一个递归函数来计算子类

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多