Python
3更改了您指定元类的方式,
__metaclass__不再检查。
使用
metaclass=...在类 签名 :
class Table(object, metaclass=metaTable):
演示:
>>> class metaTable(type):... def __getattr__(cls, key):... temp = key.split("__")... name = temp[0]... alias = None... if len(temp) > 1:... alias = temp[1]... return cls(name, alias)...>>> class Table(object, metaclass=metaTable):... def __init__(self, name, alias=None):... self._name = name... self._alias = alias...>>> d = Table>>> d.student__s<__main__.Table object at 0x10d7b56a0>
如果需要在代码库中同时提供对Python
2和3的支持,则可以使用
six.with_metaclass()基类生成器或
@six.add_metaclass()类装饰器来指定元类。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)