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 应该只使用提供的内容。这就是为什么继承有时被称为差异编程。
我想知道是否可以使用 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 应该只使用提供的内容。这就是为什么继承有时被称为差异编程。