python属性issu

2024-09-28 03:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个设计用于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__过载:

^{pr2}$

以及用于连接到从数据库加载内容的方法:

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

使用这个__setattr__我只能初始化__id和{}值。我的数据库中还有两个字段没有加载。我不能用__setattr__初始化它们,因为__table变量还没有初始化,而且{}和python不能调用load方法和发送查询。在

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


Tags: 方法selfid数据库objectpostgresqldeftable
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:42

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

只需将load()移到__init__()中,并完全删除{}。在

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

相关问题 更多 >

    热门问题