繁体   English   中英

python __setattr__属性问题

[英]python __setattr__ attribute issue

我有一个设计用于postgresql db的类:

dbclass = DBclass(1)
class DBclass(object):
    select_query    = 'SELECT * FROM "{table}" WHERE {table}_id=%s'

    def __init__(self, id=None):
            self.__id       = id
            self.__table    = self.__class__.__name__.lower()

我有__setattr__重载:

def __setattr__(self, name, value):
    super(DBclass, self).__setattr__(name, value)
    self.load()

和用于连接以从db加载内容的方法:

def load(self):
    # Here I send select query and get two remaining values

使用此__setattr__我只能初始化__id__table值。 我的数据库中仍有两个未加载的字段。 我无法使用__setattr__初始化它们,因为__table变量尚未初始化,而__id和python无法调用load方法并发送查询。

也许我在决策中加入了错误的逻辑,并且不应像这样从db中初始化db的值。

您的load()方法似乎将分配其他两个值,这意味着它将至少两次调用__setattr__() 除非在load()中有避免这种情况的逻辑,否则几乎可以肯定会创建一个无限循环。 基本加载方法不太可能要从__setattr__()调用,因为它可能会产生意外的副作用(例如, __setattr__()更新对象上的任何值时,数据库中的所有值都会被重置)。

只需将load()移到__init__()并完全摆脱__setattr__()

 def __init__(self, id=None):
    self.__id       = id
    self.__table    = self.__class__.__name__.lower()
    self.load()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM