gpt4 book ai didi

python - 使类在继承方面可迭代

转载 作者:太空狗 更新时间:2023-10-30 01:06:50 25 4
gpt4 key购买 nike

好吧,使用元类简单地使一个类可迭代就足够容易了(所以这里有一些其他的答案)。但是,我希望使一个类可迭代,并使一个人能够“基于继承迭代子组”。我的使用示例:

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”(或更远的 child )的实例。

(如何)这最容易实现?以这种方式添加更多子类需要最少的工作/更改?

最佳答案

您可以使用 isinstance 来确保您只获得类实例

在您的代码中,它是一行更改:

class IterPartRegistry(type):
def __iter__(cls):
return (c for c in cls._registry if isinstance(c, cls))

关于python - 使类在继承方面可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34832334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com