2011-04-26 72 views
2

是否有办法让所有班级的继承词典?班级子类词典

喜欢的东西

class MagikClass : 

     pass 

class A(MagikClass) : 

     __name__ = "A" 

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

什么问题用grep? 'grep'类。* MagikClass'* .py'好像完全可以工作。 – 2011-04-26 14:45:42

+0

@ S.Lott对于这个问题的明显延伸,它不起作用:'B类(A):'。此外,如果python程序的其他部分要处理这些信息,则必须使用子进程和解析来获取信息,这不像下面的解决方案那样优雅。 – 2011-04-26 14:52:22

回答

4

这里是增加了一个属性_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'>} 
+0

感谢您的回答(: – uhbif19 2011-04-26 15:02:01