好吧,简单地让一个类iterable很容易使用元类(所以这里有一些其他答案)。不过,我希望使一个类成为iterable,并使之能够“基于继承迭代子组”。我的一个使用示例:
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”的实例(或更后面的子组)。在
(如何)这是最容易实现的?以这种方式添加更多的子类需要最少的工作量/更改?在
可以使用isinstance来确保只获取类实例
在您的代码中只需一行代码:
您可以让每个类维护自己的实例列表,方法是 它自己的} 方法:
_registry
类属性。然后,不是检查每个 实例是一个特定的类,您可以迭代_registry
中每个子类的cls
的所有值。要找到这些子类,可以使用 ^{收益率
^{pr2}$相关问题 更多 >
编程相关推荐