擅长:python、mysql、java
<p>元类可以跟踪定义的类。<code>Register.__init__</code>在具有此元类的类被<em>定义</em>时调用。我们只需将名称和对象添加到元类中的注册表dict中。这样你以后就可以直接查了。在</p>
<pre><code>registry = {} # dict of subclasses
def get_entity( name ):
return registry[name]
class Register(type):
def __init__(cls, name, bases, dict):
registry[name] = cls
type.__init__(cls,name, bases, dict)
class EntityBase(object):
__metaclass__ = Register
class OneThing(EntityBase):
pass
class OtherThing(OneThing):
pass
print registry # dict with Entitybase, OneThing, OtherThing
print get_entity("OtherThing") # <class '__main__.OtherThing'>
</code></pre>
<p>顺便说一句,工厂实例化了类,所以这个名称不适合只返回类的函数。在</p>