Python子类跟踪元类与内置类

2024-05-29 03:49:39 发布

您现在位置:Python中文网/ 问答频道 /正文

对于Django选项卡库,我创建了一个使用标记子类跟踪的体系结构。在

为此,我创建了一个基类,然后从中派生出所有选项卡类。我使用递归使用cls.__subclasses__()方法的函数跟踪子类。在

为了知道哪些子类是叶类/real tabs,我选择了手动的方式来做这件事,我将__tab__ = True添加到任何我想显示为tab的类中。这样做的原因是我在TabView下面创建了其他不应该显示为制表符的抽象类。也许这本书可以重新写成一个装饰师。在

示例:

def get_descendants(cls):
    """Returns all subclasses for cls, and their sublasses, and so on..."""
    descendants = []
    subclasses = cls.__subclasses__()
    for subclass in subclasses:
        descendants.append(subclass)
        descendants += get_descendants(subclass)
    return descendants

def TabView(object):
    def _tab_group_members(self):
        descendants = get_descendants(TabView)
        return [d for d in descendants if '__tab__' in d.__dict__]
    (...)

def ConcreteTab(TabView):
    __tab__ = True

现在我开始读马蒂·阿尔钦的《亲Django》一书。在那里,他建议使用元类来跟踪子类:

^{pr2}$

元类方法的优点是什么?它比使用__subclasses__()好吗?在


Tags: django方法intrueforgetdef子类
1条回答
网友
1楼 · 发布于 2024-05-29 03:49:39

使用元类意味着您存储在类本身内部的所有信息。这也意味着信息是在创建类时存储的,而不是在创建之后扫描所有类。这意味着您只需担心创建类—它们会自动跟踪。在

相关问题 更多 >

    热门问题