Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类子类词典_Python_Oop - Fatal编程技术网

Python 类子类词典

Python 类子类词典,python,oop,Python,Oop,是否有一种方法可以制作所有类继承的字典 差不多 class MagikClass : pass class A(MagikClass) : __name__ = "A" print magik_dict # -> { "A": A } 下面是一个解决方案,它向每个类添加一个属性\u derived,其中包含该类的派生类: class Meta(type): def __new__(cls, name, bases, dict_):

是否有一种方法可以制作所有类继承的字典

差不多

 class MagikClass :

       pass

 class A(MagikClass) :

       __name__ = "A"

 print magik_dict # -> { "A": A }

下面是一个解决方案,它向每个类添加一个属性
\u derived
,其中包含该类的派生类:

class Meta(type):
    def __new__(cls, name, bases, dict_):
        new_class = type.__new__(cls, name, bases, dict_)
        new_class._derived = {}
        if isinstance(bases[0], Meta):
            bases[0]._derived[name] = new_class
        return new_class

class Magic(object):
    __metaclass__ = Meta

class A(Magic):
    pass

class B(Magic):
    pass

print Magic._derived
印刷品

{'A': <class '__main__.A'>, 'B': <class '__main__.B'>}
{'A':,'B':}

格雷普怎么了
grep'class.*MagikClass'*.py
似乎可以完美地工作。@S.Lott对于问题的明显扩展不起作用:
class B(A):
。此外,如果python程序的其他部分要处理此信息,则必须使用子流程和解析来获取信息,这远不如下面的解决方案那么优雅。