繁体   English   中英

如何在 Python 类中删除 self 的隐式传递?

[英]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.uutFcnself插入? 我试过通过构造函数传递值,但这引起了其他麻烦(如果这是正确的路径,我可能需要重新审视。)

蒂亚!

解决它的一种方法是在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM