【发布时间】:2016-04-22 07:15:11
【问题描述】:
使用元类很容易让一个类可迭代(这里有一些其他答案)。但是,我希望使一个类可迭代,并且还使一个类能够“基于继承迭代一个子组”。我的使用示例:
class IterPartRegistry(type):
def __iter__(cls):
return iter(cls._registry)
class A(object, metaclass=IterPartRegistry):
_registry = []
def __init__(self, name):
self.name = name
self._registry.append(self)
class B(A):
pass
class C(A):
pass
A("A - first")
B("B - first")
B("B - second")
C("C - first")
for t in A:
print(t.name)
print(" --- ")
for t in B:
print(t.name)
exit()
第一个循环有效 - 它遍历“A”的所有实例和子代。然而,第二个循环应该只在“A”的特定子组上运行——那些是子“B”(或下一行的子)的实例。
(如何)这可以最简单地实现吗?以这种方式添加更多子类需要最少的工作/更改?
【问题讨论】:
标签: python inheritance metaclass iterable