Вот синглтоны(из темы: http://python.su/forum/topic/31847/):
1. Вариант : @WoMax
#!/usr/bin/env python from selenium import webdriver def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class Firefox(webdriver.Firefox): pass if __name__ == '__main__': Firefox().get('https://www.ya.ru') Firefox().get('https://www.google.com')
2. Вариант моего друга
from selenium import webdriver class Chrome(webdriver.Chrome): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super().__new__(cls, *args, **kwargs) super().__init__(cls._instance, *args, **kwargs) return cls._instance def __init__(self, *args, **kwargs): pass
Синглтон написан в python-модуле и в нем же используется в методах из 3 классов расположенных в этом же модуле. Браузер открытых объектом webdriver.Chrome закрывается методом quit() этого класса. И при уничтожении объекта этого класса браузер автоматически не закрывается! Это нужно делать явно.
Как это сделать лучше всего? Мне видятся такие варианты:
1. Написать реализацию метода __del__() для синглтон класса
2. Написать функцию и повесить ее в atexit() . А в этой функции вызывать Chrome().quit()