Форум сайта python.su
@4kpt_IV:
Да. Только вот не работает! ;)
Когда делаю так:
Chrome().get('ya.ru') Chrome().get('google.com')
Офлайн
#!/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')
Отредактировано WoMax (Янв. 15, 2017 01:06:21)
Офлайн
WoMax
Как работает ваш код понимаю. Но не понимаю, а почему мой-то не работает? Что в нем не хватает?
Офлайн
sys_devВаш код - синглтон, просто работает не так как вы ожидаете. Дело в реализации самого вебдрайвера.
Но не понимаю, а почему мой-то не работает? Что в нем не хватает?
Офлайн
Итого:
Либо вариант от @WoMax либо этот(моего друга):
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
Отредактировано sys_dev (Янв. 16, 2017 11:52:33)
Офлайн
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
Офлайн
WoMaxЭто почему ж? :) Работает же! ;)
жуткий костыль =/
Отредактировано sys_dev (Янв. 16, 2017 14:59:16)
Офлайн
sys_dev
А Вы можете пояснить, что в нем происходит? Когда распишите по пунктам - сами поймете
Отредактировано 4kpt_IV (Янв. 16, 2017 15:24:51)
Офлайн
А чем не устраивает мой вариант?
Офлайн
FishHookПри вашем варианте возникает запах “поезд”. Об этом в общеизвестной книге про рефакторинг. Пример:
А чем не устраивает мой вариант?
obj.subobj1.subobj2.subobj3.
Chrome().get('http://ya.ru')
MySingleton.chrome.get('https://ya.ru')
Отредактировано sys_dev (Янв. 17, 2017 11:00:48)
Офлайн