gpt4 book ai didi

python - 跟踪子类的通用元类?

转载 作者:太空狗 更新时间:2023-10-29 17:58:20 24 4
gpt4 key购买 nike

我正在尝试编写一个通用元类来跟踪子类

因为我希望它是通用的,所以我不想在这个元类中硬编码任何类名,因此我想出了一个函数来生成正确的元类,比如:

def make_subtracker(root):
class SubclassTracker(type):
def __init__(cls, name, bases, dct):
print('registering %s' % (name,))
root._registry.append(cls)
super(SubclassTracker, cls).__init__(name, bases, dct)
return SubclassTracker

这样我就可以调用它为特定的 root 类生成元类:

__metaclass__ = make_subtracker(Root)

这是我遇到的问题。我不能这样做:

class Root(object):
_registry = []
__metaclass__ = make_subtracker(Root)

...因为当我使用make_subtracker(Root)Root 还没有定义。我稍后尝试添加 __metaclass__ 属性,这样至少它可以应用于子类:

class Root(object):
_registry = []

Root.__metaclass__ = make_subtracker(Root)

...但这行不通。 __metaclass__ 在读取类定义时有特殊处理,如 Customizing class creation 中定义.

我正在寻找建议以执行此操作(在运行时以应用于其子类的方式更改类的元类,或任何其他替代方法)。

最佳答案

Python 会自动为新型类执行此操作,如 answer 中所述类似的问题How to find all the subclasses of a class given its name?在这里。

关于python - 跟踪子类的通用元类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915315/

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