python __setattr__ 属性问题
python __setattr__ attribute issue
我有一个 class 设计用于与 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()
以及用于连接以从数据库加载内容的方法:
def load(self):
# Here I send select query and get two remaining values
有了这个 __setattr__
我只能初始化 __id
和 __table
值。我的数据库中仍有两个字段未加载。我无法使用 __setattr__
初始化它们,因为 __table
变量尚未初始化,而且 __id
和 python 无法调用加载方法并发送查询。
也许我的决定逻辑错误,不应该这样启动来自数据库的值。
您的 load()
方法似乎可能会分配您的其他两个值,这意味着它将至少调用 __setattr__()
两次。除非你在 load()
中有逻辑来避免它,否则你几乎肯定会创建一个无限循环。一个基本的加载方法不太可能是你想从 __setattr__()
中调用的东西,因为它可能会产生意想不到的副作用(例如,任何时候你更新对象上的任何值,数据库中的所有值都会被重置) .
只需将 load()
移动到 __init__()
并完全删除 __setattr__()
。
def __init__(self, id=None):
self.__id = id
self.__table = self.__class__.__name__.lower()
self.load()
我有一个 class 设计用于与 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()
以及用于连接以从数据库加载内容的方法:
def load(self):
# Here I send select query and get two remaining values
有了这个 __setattr__
我只能初始化 __id
和 __table
值。我的数据库中仍有两个字段未加载。我无法使用 __setattr__
初始化它们,因为 __table
变量尚未初始化,而且 __id
和 python 无法调用加载方法并发送查询。
也许我的决定逻辑错误,不应该这样启动来自数据库的值。
您的 load()
方法似乎可能会分配您的其他两个值,这意味着它将至少调用 __setattr__()
两次。除非你在 load()
中有逻辑来避免它,否则你几乎肯定会创建一个无限循环。一个基本的加载方法不太可能是你想从 __setattr__()
中调用的东西,因为它可能会产生意想不到的副作用(例如,任何时候你更新对象上的任何值,数据库中的所有值都会被重置) .
只需将 load()
移动到 __init__()
并完全删除 __setattr__()
。
def __init__(self, id=None):
self.__id = id
self.__table = self.__class__.__name__.lower()
self.load()