[英]How do I remove implicit passing of self in Python class?
我有一组测试,我发现我正在从一个类到另一个类复制/粘贴很多代码,所以我想创建一个基类来删除它。
为了有效地做到这一点,我需要使被测模块的调用函数可以被基类访问。 看起来应该很简单,但我发现如果我的子类指定了一个全局变量作为要测试的函数,基类在调用它时会插入“self”作为参数零,导致TypeError: FooBar() takes exactly 2 arguments (3 given)
我的代码:
import unittest
import moduleOfFunctionsToTest as uut
class Base_Test_Class( unittest.TestCase ):
def setUp( self ):
# Common test suite setup
return
def runFcn( self ):
return self.uutFcn( "foo", self.bar )
# other common fucntions.
class TheFirstTestClass( Base_Test_Class ):
uutFcn = uut.FooBar
bar = "0"
def test_SomeCode( self ):
self.runFcn
我怎么能叫self.uutFcn
不self
插入? 我试过通过构造函数传递值,但这引起了其他麻烦(如果这是正确的路径,我可能需要重新审视。)
蒂亚!
解决它的一种方法是在uutFcn
的定义中使用staticmethod
:
import unittest
import moduleOfFunctionsToTest as uut
class Base_Test_Class( unittest.TestCase ):
def setUp( self ):
# Common test suite setup
return
def runFcn( self ):
return self.uutFcn( "foo", self.bar )
# other common fucntions.
class TheFirstTestClass( Base_Test_Class ):
uutFcn = staticmethod(uut.FooBar)
bar = "0"
def test_SomeCode( self ):
self.runFcn()
这是有效的,因为staticmethod
确保给定的函数始终在没有附加参数的情况下执行,无论您是通过类还是实例调用它,因此uut.FooBar
的签名将保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.