python __setattr__属性问题

时间:2015-03-10 13:29:41

标签: python setattr

我有一个专门用于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也无法调用加载方法并发送查询。

也许我在我的决定中使用了错误的逻辑,并且db的值不应该像这样启动。

1 个答案:

答案 0 :(得分:1)

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

load()移至__init__()并完全摆脱__setattr__()

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