Python 将数据序列化到pymongo;如何处理具有属性的setter?
我正在将Python 将数据序列化到pymongo;如何处理具有属性的setter?,python,python-3.x,properties,pymongo,Python,Python 3.x,Properties,Pymongo,我正在将\uuuu dict\uuuu序列化到mongo,但我想截取设置 满载t。如何在不将属性重命名为的情况下执行此操作 \u以便将属性与setter一起使用 我知道我可以用属性替换现有的加载的属性,并以这种方式使用setter: def Swallow: def __init__(self): self._laden = None @property def laden(self): return self._laden @
\uuuu dict\uuuu
序列化到mongo,但我想截取设置
满载
t。如何在不将属性重命名为的情况下执行此操作
\u
以便将属性与setter一起使用
我知道我可以用属性
替换现有的加载的
属性,并以这种方式使用setter:
def Swallow:
def __init__(self):
self._laden = None
@property
def laden(self):
return self._laden
@laden.setter
def laden(self, laden):
updated = some_new_code(laden)
self._laden = updated
但这意味着序列化\uuu dict\uuu
将在数据库中存储名称\u loaded
,而不是loaded
,从而破坏现有存储的数据
我真的希望它是:
def Swallow:
def __init__(self):
self.laden = None
@property
def laden(self):
return self.laden
@laden.setter
def laden(self, laden):
updated = some_new_code(laden)
self.laden = updated
但在后一种情况下,setter调用自己——通常不起作用
这是可以实现的吗?有什么想法吗?看来你真正的问题是: 我正在将
\uuuu dict\uuuu
序列化到mongo,但我想截获设置装载的
。如何在不将属性重命名为\u loaded
的情况下将属性与setter一起使用
您不能只在实例上分配相同的名称,不。self.loaded
是并且将始终由属性
对象处理。如果您对技术细节感兴趣,请阅读;属性
对象是一个数据描述符,这意味着对实例.name
的所有访问都是由类型(实例).name
属性对象专门处理的。没有例外
您可以执行以下任一操作:
- 在
中访问相同的名称:self.\uu dict\uuu
这将绕过正常的@property def laden(self): return self.__dict__['laden'] @laden.setter def laden(self, laden): updated = some_new_code(laden) self.__dict__['laden'] = updated
路径,直接到达源对象.attribute
- 不使用财产;您可以通过以下方式截取实例上的属性设置:
这将截获所有
访问,但只有当实例。某些\u名称
是某些\u名称
时,您才会实际使用该值执行操作'loaded'
- 在可以为您处理序列化的基类上定义一个自定义方法,并将配置添加到您的类中,以帮助该方法确定要序列化的属性,或者让该方法自动检测
对象。这将允许您将属性
包含到\u名称
翻译中名称
- 使用来处理对象序列化。我确信其中的一些允许为他们的字段定制setter,或者至少允许定义您自己的自定义字段类型,允许您在设置时更改值
def __setattr__(self, name, value):
if name == 'laden':
value = some_new_code(laden)
super().__setattr__(name, value)