Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以字符串形式获取类成员名称_Python_Django - Fatal编程技术网

Python 以字符串形式获取类成员名称

Python 以字符串形式获取类成员名称,python,django,Python,Django,我有一个python类(基本上是Django序列化程序): 当我使用此序列化程序序列化REST请求时,我必须执行以下操作: name = serializer.data.pop("name") name = serializer.data.pop(serializer.name.__varname__) 以获取序列化程序数据的名称字段 这在类本身和我使用它的任何地方之间创建了脆弱的耦合 有没有一种方法可以做到: name = serializer.data.pop("name") name

我有一个python类(基本上是Django序列化程序):

当我使用此序列化程序序列化REST请求时,我必须执行以下操作:

name = serializer.data.pop("name")
name = serializer.data.pop(serializer.name.__varname__)
以获取序列化程序数据的名称字段

这在类本身和我使用它的任何地方之间创建了脆弱的耦合

有没有一种方法可以做到:

name = serializer.data.pop("name")
name = serializer.data.pop(serializer.name.__varname__)
这样,当重构时,我很快就会发现我也需要重构这个地方。使用字符串时,我将无法找到它


我知道我可以向序列化程序添加常量,但我更喜欢更优雅的东西。

现在还不清楚您在这里做什么。为什么使用属性比使用dict键更好?那个名字应该是什么?你为什么要弹出它呢?
serializer.name
怎么可能没有命名
name
?或者你是说
serializer.name.name
CharField
确实有一个名为
name
@DanielRoseman的属性-主要是因为重构的原因。使用pycharm等工具,更改类成员可以在所有其他位置轻松找到它。然而,通常很难将字段名与另一个文件中的字符串关联起来。特别是如果这是一个类似于“name”的字符串,它在代码中的许多地方重复出现。那么
UsersSerializer.name.field\u name
而不是
“name”
呢?