蟒蛇3
changed how you specify a metaclass
,
__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>
如果需要在代码库中同时支持Python2和3,可以使用
six.with_metaclass()
baseclass generator
或者
@six.add_metaclass()
class decorator