初始化Python属性

时间:2016-05-02 23:28:24

标签: python postgresql python-2.7 properties psycopg2

我正在编写一个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的地方添加一条# *的行来解决这个问题,但这感觉很笨拙。这是我为方便而付出的代价吗?我只是挑剔吗?或者有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用:

而不是if ...语句
try:
    self._connection.close()
except AttributeError:
    pass
self._connection = psycopg2.connect(connection_string)
return self._connection
相关问题