Если вы хотите очень простой переход привязки, который работает после маршрутизации и в маршрутизируемых представлениях, вы также можете использовать ng2-simple-page-scroll .
Go there
Или сразу после маршрутизации:
Go there
Это делает простой мгновенный прыжок, но это работает.
Вы можете создать модуль подключения, поскольку модули сохраняют один и тот же объект во всем приложении, и зарегистрировать функцию для его закрытия с помощью модуля atexit
# db.py:
import sqlite3
import atexit
con = None
def get_connection():
global con
if not con:
con = sqlite3.connect('somedb.sqlite')
atexit.register(close_connection, con)
return con
def close_connection(some_con):
some_con.commit()
some_con.close()
# your_program.py
import db
con = db.get_connection()
cur = con.cursor()
cur.execute("SELECT ...")
Это предложение основан на предположении, что соединение в вашем приложении выглядит как единственный экземпляр (singleton), который хорошо предоставляет глобальный модуль.
Если это не так, то вы можете использовать деструктор.
Однако деструкторы этого не делают. хорошо работают со сборщиками мусора и циклическими ссылками (вы должны сами удалить циклическую ссылку перед вызовом деструктора), и если это не так (вам нужно несколько подключений), вы можете использовать деструктор. Только не держите круговые ссылки, иначе вам придется их сломать самостоятельно.
Кроме того, то, что вы сказали о C ++, неверно. Если вы используете деструкторы в C ++, они вызываются либо после завершения блока, определяющего объект (например, в python с
), либо когда вы используете ключевое слово delete
(которое освобождает объект, созданный с помощью новый
). Вне этого вы должны использовать явный close ()
, который не является деструктором. Это похоже на python - python даже «лучше», потому что у него есть сборщик мусора.
Прочтите с оператором . Вы описываете его вариант использования.
Вам необходимо обернуть ваше соединение в класс «Диспетчер контекста», который обрабатывает методы __ enter __
и __ exit __
, используемые ] с оператором
.
См. PEP 343 для получения дополнительной информации.
Изменить
«мой объект не используется так же просто, как открытие-воспроизведение-закрытие, но сохраняется как членом другого, более крупного объекта »
class AnObjectWhichMustBeClosed( object ):
def __enter__( self ):
# acquire
def __exit__( self, type, value, traceback ):
# release
def open( self, dbConnectionInfo ):
# open the connection, updating the state for __exit__ to handle.
class ALargerObject( object ):
def __init__( self ):
pass
def injectTheObjectThatMustBeClosed( self, anObject ):
self.useThis = anObject
class MyGuiApp( self ):
def run( self ):
# build GUI objects
large = ALargeObject()
with AnObjectWhichMustBeClosed() as x:
large.injectTheObjectThatMustBeClosed( x )
mainLoop()
. Некоторые называют это« Внедрение зависимостей »и« Инверсия управления ». Другие называют это паттерном Стратегия . «ObjectThatMustBeClosed» - это стратегия, подключенная к более крупному объекту. Сборка создается на верхнем уровне приложения с графическим интерфейсом, поскольку это '