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

标签 python metaclass

Digression Start

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

Digression end

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

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__

输出:

None
None

我做错了什么?

最佳答案

我并不完全熟悉您正在执行的全局方法,像那样设置 __metaclass__。据我所知,这是另一种有效的风格。

但我将提供一个我熟悉的示例:

class MeTest(type):
    def __new__(cls,name,bases,dict):
        dict['__doc__'] = """Default Doc"""
        return type.__new__(cls,name,bases,dict)

class Test(object):
    __metaclass__ = MeTest

关于python - 这个简单的 python 元类有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11256246/

相关文章:

python - 元类与 Django 中的 modelformset_factory 冲突

javascript - 什么会导致 html 和脚本在 for 循环的迭代中表现不同?

python - 每个 Flask 请求都应该连接到 Redis 集群吗?

python - 如何在 python 中检查字符串中的这个或那个字符?

python - 提供不同线性代数后端的架构

python - Python 中的元类 : a couple of questions to clarify

python - 如何创建一个简单的元类?

python - 非贪婪 XML 中的多个匹配(Python 正则表达式)

python - mysql-connector-python cursor_cent.py 文件上的 Django 迁移错误 'TypeError: sequence item 1: expected a bytes-like object, str found'

python - 如何将 abc.MutableMapping 的实现注册为 dict 子类?