2
是否有办法让所有班级的继承词典?班级子类词典
喜欢的东西
class MagikClass :
pass
class A(MagikClass) :
__name__ = "A"
print magik_dict # -> { "A": A }
是否有办法让所有班级的继承词典?班级子类词典
喜欢的东西
class MagikClass :
pass
class A(MagikClass) :
__name__ = "A"
print magik_dict # -> { "A": A }
这里是增加了一个属性_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'>}
感谢您的回答(: – uhbif19 2011-04-26 15:02:01
什么问题用grep? 'grep'类。* MagikClass'* .py'好像完全可以工作。 – 2011-04-26 14:45:42
@ S.Lott对于这个问题的明显延伸,它不起作用:'B类(A):'。此外,如果python程序的其他部分要处理这些信息,则必须使用子进程和解析来获取信息,这不像下面的解决方案那样优雅。 – 2011-04-26 14:52:22