Не знаю как задать вопрос, поэтому опишу суть. Мне в качестве помощи нужны варианты реализации, поэтому подскажите как можно реализовать. Так же есть мои 2 варианта. Мб они будут похожи на ваши. Условно есть главный(main) класс, который вызывает методы из 3х других классов, заданных в переменных главного класса. Эти 3и класса управляют одним глобальным общим классом. Для большей детальности это вебдрайвер Selenium. Чтобы браузер не был попусту открыт, я его инициализирую в нужный момент и передаю в остальные классы.
Условно как это выглядит. Там описаны варианты реализации. Но может все таки у кого есть более верное решение, правильная идея?
# 1 class
class FirstClass:
def __init__(self):
self.webdriver = None
# 2 class
class SecondClass:
def __init__(self):
self.webdriver = None
# 3 class
class ThirdClass:
def __init__(self):
self.webdriver = None
# Main class
class MainClass:
def __init__(self):
# этот webdriver передаётся в другие классы. можно считать, что он "главный"
self.webdriver = None
self.first = FirstClass(self.webdriver)
self.second = SecondClass(self.webdriver)
self.third = ThirdClass(self.webdriver)
def init_browser_v1(self):
# инициализация драйвера. по наивности думал, что это рабочий вариант,
# думал, что задав "главной" переменной объект, переменные других объектов,
# ссылающиеся на главный, будут наследовать его значения, но я сглупил. это не
#правильно.
self.webdriver = Chrome()
def init_browser_v2(self):
# инициализация драйвера. Решил передавать объект таким образом. Вариант рабочий,
# но есть проблема. При возникновении ошибки драйвера во время работы в одном из
# классов, в классе с ошибкой значение драйвера становится None, в других объект
# сохраняется.
self.webdriver = Chrome()
self.first.webdriver = self.webdriver # здесь webdriver = Chrome
self.second.webdriver = self.webdriver # здесь webdriver = None, из-за возникшей ошибки
self.third.webdriver = self.webdriver # здесь webdriver = Chrome
def init_browser_v3(self):
class WD:
def __init__(self):
self.wd = Chrome()
# создать класс, в котором будет хранится вебдрайвер, но вызовы становятся
# громоздкими. Условно будет выглядеть так. self.webdriver.wd.get("url")
self.webdriver = WD()
self.first.webdriver = self.webdriver
self.second.webdriver = self.webdriver
self.third.webdriver = self.webdriver