我有一个用于处理postgresql的类:
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的值不应该这样启动。
发布于 2015-03-10 13:38:10
您的load()方法可能会分配另外两个值,这意味着它至少会调用__setattr__()两次。除非您有load()中的逻辑来避免它,否则您几乎肯定会创建一个无限循环。基本加载方法不太可能是您希望从__setattr__()中调用的东西,因为它可能会产生意外的副作用(例如,每当您更新对象上的任何值时,数据库中的所有值都会被重置)。
只需将load()移动到__init__()中,就可以完全摆脱__setattr__()。
def __init__(self, id=None):
self.__id = id
self.__table = self.__class__.__name__.lower()
self.load()https://stackoverflow.com/questions/28965065
复制相似问题