Python元类和对象基类

jld*_*ont 6 python metaclass

在阅读了优秀的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.

Ray*_*ger 3

对象继承会自动带来类型元类。这会覆盖您的模块级别__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