在阅读了优秀的SO帖子之后,我尝试了一个模块级别的元类:
def metaclass(future_class_name, future_class_parents, future_class_attrs):
print "module.__metaclass__"
future_class_attrs["bar"]="bar"
return type(future_class_name, future_class_parents, future_class_attrs)
__metaclass__=metaclass
class Foo(object):
def __init__(self):
print 'Foo.__init__'
f=Foo()
Run Code Online (Sandbox Code Playgroud)
除非我删除Foo 的基类,否则这不起作用(即"模块.元类 "不会被打印)object.怎么会?
注意:我使用的是Python 2.6.1.
从对象继承会自动带来类型元类。这会覆盖您的模块级别__metaclass__规范。
如果元类是在类级别指定的,则对象不会覆盖它:
def metaclass(future_class_name, future_class_parents, future_class_attrs):
print "module.__metaclass__"
future_class_attrs["bar"]="bar"
return type(future_class_name, future_class_parents, future_class_attrs)
class Foo(object):
__metaclass__ = metaclass
def __init__(self):
print 'Foo.__init__'
f=Foo()
Run Code Online (Sandbox Code Playgroud)
请参阅http://docs.python.org/reference/datamodel.html?highlight=元类#customizing-class-creation