Python 其他 class 使用 cls 设置自变量?

Python set self-variables by other class using cls?

我想知道是否可以使用 cls 通过不同的 class 设置 class 的变量?

背后的故事: 我正在为不同的目的编写测试,但看到设置的一部分与已经存在的 class 相同。所以我会用已经存在的 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-class:

的变量中定义的值之一时,我会收到错误消息
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 具有将在 setUp 上执行的函数 connect2DB。 如果它指的是它自己(就像原来的那样),那很好。 如果我用 cls 替换自我,它将尝试在 setUp 中执行 TestClient.connect2DB - 这不存在。所以它会再次需要 self 因为将 connect2DB 放入 TestClient 不是一个选项。

如何解决?

你的新 class 应该继承 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])

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