Интересно, возможно ли установить переменные класса другим классом, используя cls
?
История, стоящая за этим: я пишу тесты для разных целей, но вижу, что одна часть Настройка такая же, как в уже существующем классе. Поэтому я бы сделал setUp
по уже существующему:
Оригинальный код:
class TestBase(unittest.TestCase):
def setUp(self):
self.handler = txt.getHandler(hcu.handler3())
self.curves = self.handler.curves()
self.arguments = (getInit())
self.ac = self.connect2DB(self.arguments)
self.au = AutoUtils()
До сих пор это работало хорошо. Теперь в моем TestClient
я хотел бы использовать это:
from .testsDB import TestBase as tb
class TestClient(unittest.TestCase):
def setUp(self):
tb.setUp()
И изменил в TestBase
setUp
следующее:
@classmethod
def setUp(cls):
cls.handler = txt.getHandler(hcu.handler3())
cls.graph = cls.handler.curves()
cls.argv = (getInit())
cls.ac = cls.connect2DB(cls.arguments)
cls.au = AutoUtils()
Но Я получаю сообщение об ошибке, как только я использую одно из значений, определенных в переменных класса TestClient
:
def test_Duplicates(self):
self.testDB = self.ac.connect(self.ac.client, self.arguments[4])
С ошибкой:
In test_Duplicate (Curves.tests_client.TestClient) :
Traceback (most recent call last):
File "/home/qohelet/Curves/tests_client.py", line 49, in test_Duplicate
self.testDB = self.ac.connect(self.ac.client, self.arguments[4])
AttributeError: 'TestClient' object has no attribute 'ac'
Is на самом деле возможно то, что я пытаюсь?
РЕДАКТИРОВАТЬ: После написания этого и просмотра ответов я сделал еще один обзор. Да, действительно, у меня есть круговая проблема.
TestBase
имеет функцию connect2DB
, которая будет выполняться на setUp
. Если это относится к себе (как в оригинале), это хорошо. Если я заменю себя на cls
, он попытается выполнить TestClient.connect2DB
в setUp
- которого не существует. Так что это потребует самообслуживания снова, поскольку ввод connect2DB
в TestClient
не вариант.
Как это решить?