Python通过其他类使用cls设置自变量?

2024-07-01 07:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以使用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不是一个选项

如何解决这个问题


Tags: testselfclientdefsetupunittestargumentsac
1条回答
网友
1楼 · 发布于 2024-07-01 07:46:09

当然,您的新类应该只继承setup()

from .testsDB import TestBase as tb
class TestClient(tb):
    def test_Duplicates(self):
        self.testDB = self.ac.connect(self.ac.client, self.arguments[4])

继承的全部意义在于,您不会修改您从中继承的内容。您的新类应该只使用所提供的内容。这就是为什么继承有时被称为差异编程

相关问题 更多 >

    热门问题