__metaclass__ 向创建的类添加无效属性?

Posted

技术标签:

【中文标题】__metaclass__ 向创建的类添加无效属性?【英文标题】:__metaclass__ adding invalid attribute to class created? 【发布时间】:2014-09-29 06:56:23 【问题描述】:

元类向类添加无效属性?

这是我的代码:

def __metaclass__(clsname, bases, dct):
    dct["key1"] = "value1"
    dct["invalid identifier"] = "value2"
    return type(clsname, bases, dct)


class Cls():
    pass



for name in dir(Cls):
    if not name.startswith("_"):
        print name

当我运行它时,我得到了:

>>> 
invalid identifier
key1
>>> 

可以访问invalid identifier吗?

【问题讨论】:

【参考方案1】:

您仍然可以使用getattr() 访问该标识符:

getattr(Cls, 'invalid identifier')

或者直接在类__dict__上映射:

Cls.__dict__['invalid identifier']

你不能使用直接属性访问,因为它确实不是一个有效的标识符。

【讨论】:

以上是关于__metaclass__ 向创建的类添加无效属性?的主要内容,如果未能解决你的问题,请参考以下文章

metaclass简单使用

如何向元类实例添加属性?

元类编程-- metaclass

如果 __metaclass__ 是类属性,它如何控制类的生成?

Python 2.7 - 这是对 __metaclass__ 的有效使用吗? [关闭]

35.Python面向对象元类:type()__metaclass__属性实现简易ORM框架