[英]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.