这个简单的python元类有什么问题?

rit*_*att 6 python metaclass

Digression开始

我刚学会了Python中的元类.我不认为python的创建者希望每个人都使用它们.我的意思是名字,在大多数情况下可能不是一个类的元类足以让大多数人远离这个概念!

题外话题结束

关于我的问题.我编写了这个简单的元类来为模块中创建的所有类添加默认的文档字符串.但它不起作用:

def metest(cls,name,bases,dict):
    cls.setattr(cls,'__doc__',"""Default Doc""")
    return type(cls,(),{})

__metaclass__=metest

class test(object):
    pass

print test.__doc__

t=test()

print t.__doc__
Run Code Online (Sandbox Code Playgroud)

输出:

None
None
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

glg*_*lgl 3

我让你的例子起作用了:

def metest(name, bases, dict):
    print name, bases, dict
    dict['__doc__'] = """New Doc"""
    cls = type(name+"_meta", bases, dict)
    return cls

class Test(object):
    "Old doc"
    __metaclass__ = metest

print Test
print Test.__doc__

t = Test()

print t.__doc__
Run Code Online (Sandbox Code Playgroud)
  1. 使用“元类”。
  2. 更正“类创建函数”的签名。意志cls由我们创造。
  3. 有一个“旧”和“新”文档字符串以便区分。