python:如何从类变量访问class.__dict__?

标签 python django django-rest-framework

我需要定义一个类变量,名为“class”。我想直接在类命名空间中执行此操作,而不是在类方法中执行此操作。显然,我不能直接说:

class MyClass(object):
    a = 1
    b = 2
    class = 3

所以,我想做这样的事情:

class MyClass(object):
    a = 1
    b = 2
    self.__dict__["class"] = 3

其中“self”应替换为对类的引用。那么,如何从类命名空间引用一个类呢?


注意:这个问题可能看起来很做作,但它源于一个实际目标。

事实上,MyClass 是一个 Django REST Framework 序列化器,我需要在其上定义一个“类”字段,因为这个 REST 端点必须遵循特定的协议(protocol)。

有一个为序列化器定义的元类,它在类创建时调用 __new__() ,并且 __new__() 聚合在类上定义的所有字段并填充注册表与他们一起田野。因此,我必须在创建类之前定义变量class。另请参阅:Django REST Framework: how to make verbose name of field differ from its field_name?

最佳答案

你可以这样做:

class MyClass(object):
    a = 1
    b = 2
    vars()['class'] = 3

但是由于class是保留关键字,那么您必须使用getattrsetattr来访问变量,这样class 仍然是一个字符串。

>>> m = MyClass()
>>> getattr(m, 'class')
3

关于python:如何从类变量访问class.__dict__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325370/

相关文章:

python - 如何使用python检测多个USB端口并从USB读取数据

python - 我在 OneToOne 字段中设置了 related_name,但仍然收到 RelatedObjectDoesNotExist 错误

python - Django请求中间件在 View 中未生效

python - 如何使用 python 请求向 Django REST API 发送 POST 请求

Python 换行符\n 在 jupyter 笔记本中不起作用

python - 查找并统计网站上单词的匹配项 - 抓取

python - 我应该按照哪个顺序升级 Python、DJango 和 DJango-cms?

python - 使用 south 重命名 django 模型类名和相应的外键,而不会丢失数据

python - Django 会自动缓存模板吗?

python - 是否可以在 Python 中子类化 Lock() 对象?如果没有,还有其他调试死锁的方法吗?