实现在属性更新时调用外部函数的Python类的正确方法
我目前正在尝试实现一个python类,该类自动与具有隐式缓冲的NoSQL数据库同步,这与 为了做到这一点,我需要跟踪用户发布的属性更新,并在每次属性更新时调用使该对象与数据库或缓冲区同步的函数 在Python中实现这一点的最佳方法是什么?如果它通过实现在属性更新时调用外部函数的Python类的正确方法,python,class,object,Python,Class,Object,我目前正在尝试实现一个python类,该类自动与具有隐式缓冲的NoSQL数据库同步,这与 为了做到这一点,我需要跟踪用户发布的属性更新,并在每次属性更新时调用使该对象与数据库或缓冲区同步的函数 在Python中实现这一点的最佳方法是什么?如果它通过\uuuu setattr\uuuuuu和\uuuuu delattr\uuuuuuuuu,如何正确执行,以避免与垃圾收集器混淆?一种方法(我建议的方法)是使用 首先,为属性创建一个类,类似于: class Property: def __in
\uuuu setattr\uuuuuu
和\uuuuu delattr\uuuuuuuuu
,如何正确执行,以避免与垃圾收集器混淆?一种方法(我建议的方法)是使用
首先,为属性创建一个类,类似于:
class Property:
def __init__(self, *args, **kwargs):
#initialize the property with any information it needs to do get and set
def __get__(self,obj, type=None):
#logic to get from database or cache
def __set__(self,obj, value):
#logic to set the value and sync with database if necessary.
然后在你的类实体类中,你有这样的东西:
class Student:
student_id = Property(...)
name = Property(...)
classes = Property(...)
当然,在实践中,您可能有多种属性类型。我猜SQLAlchemy是这样做的,其中列类型是描述符。您只需要跟踪现有属性的更新,还是还需要支持添加和删除?@Thayne:现在我只需要跟踪现有属性,不需要删除或添加,并且应该抛出错误。我将尝试此操作。然而,我看到了一个问题,我需要定义一个属性族,使用不同的名称引用不同的索引,有时使用相同的名称引用不同的属性。现在,除了元编程,我看不到任何其他方法。谢谢你的回答!