Я пишу класс Python для управления подключением базы данных Postgres с помощью pyscopg2.Инициализация свойств Python
Я хотел бы, чтобы класс установил соединение с базой данных при инициализации (я чувствую, что это может быть ужасной идеей, но я не могу придумать, почему). Я пытаюсь сделать эту работу с собственностью, которой я никогда раньше не пользовался. Другими словами, я хочу, чтобы геттер вызывался из метода __init__
.
Мой класс выглядит примерно так:
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
, в месте, где я отмечен # *
, но это кажется неуклюжим. Это цена, которую я плачу за удобство? Я просто суетливый? Или есть лучший способ?
Спасибо!
Вы действительно хотите свежее соединение * каждый раз * вы спрашиваете для подключения? Просто установите его как обычный атрибут в свой '__init__' и забудьте об этом. – kindall
'if hasattr (self," _ connection ")', но я бы сказал, что было бы хуже. –
, но я действительно должен согласиться с Kindall, вы действительно уверены, что он должен устанавливать новое соединение каждый раз при доступе к собственности? –