我想知道是否可以使用cls
由不同的类设置一个类的变量
背后的故事:
我为不同的目的编写测试,但是看到设置的一部分与已经存在的类中的部分相同。因此,我将通过现有的setUp
执行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()
并在{
@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'
我所尝试的真的可能吗
编辑: 在写了这篇文章并看到了答案之后,我又做了一次复习。是的,我确实有一个循环问题
TestBase
具有函数connect2DB
,该函数将在setUp
上执行。
如果它指的是它自己(就像在原著中一样),那就好了。
如果我将self替换为cls
,它将尝试在setUp
中执行TestClient.connect2DB
,而setUp
不存在。所以它需要self,因为将connect2DB
放入TestClient
不是一个选项
如何解决这个问题
当然,您的新类应该只继承
setup()
继承的全部意义在于,您不会修改您从中继承的内容。您的新类应该只使用所提供的内容。这就是为什么继承有时被称为差异编程
相关问题 更多 >
编程相关推荐