我正在编写一个Python类来使用pyscopg2来管理Postgres数据库连接。
我喜欢这个类在初始化时建立与数据库的连接(我觉得这个可能是一个糟糕的主意,但我不能想到一个好的原因)。我试图用一个我以前从未使用过的财产来完成这项工作。换句话说,我希望从__init__
方法中调用getter。
我的班级看起来像这样:
class MyDatabase:
connection_string = "host='<host_ip>' db_name='<db_name>'"
def __init__(self):
# *
self._connection = connection
@property
def connection(self):
# Check for an existing connection
if self._connection:
self._connection.close()
self._connection = psycopg2.connect(connection_string)
return self._connection
...
在此版本中,检查现有连接会引发AttributeError: Elefriends instance has no attribute '_connection'
,这是有道理的。我可以通过在我标有self._connection = None
的地方添加一条# *
的行来解决这个问题,但这感觉很笨拙。这是我为方便而付出的代价吗?我只是挑剔吗?或者有更好的方法吗?
谢谢!
答案 0 :(得分:1)
您可以使用:
而不是if ...语句try:
self._connection.close()
except AttributeError:
pass
self._connection = psycopg2.connect(connection_string)
return self._connection