python类中保存非绑定方法作为成员函数

习惯了函数式,动不动传一个函数。但是直接把函数作为类方法保存,再调用时会报错。

举一个unittest时的例子

class MyTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print('测试\n')
        ....
        factory = make_factory(XXX)
        #非绑定函数必须这样用staticmethod()包装
        #cls.factory = staticmethod(factory)
        cls.factory = factory

    def test_factory(self):
        scenario1 = self.factory("YYY")

在setUpClass()里,按函数式方方式,用make_factory构造一个factory,是1个接受1个参数函数。希望在后面的测试用例里用这个去构造对象,如果直接

cls.factory = factory

在测试用例里,传入1个参数,会报错:

TypeError: factory() takes 1 positional argument but 2 were given

为什么多传了1个参数? 因为用

cls.XXX=XXX或 self.XXX=XXX保存的方法,

默认是作为绑定方法。这里是classmethod,所以绑定的第一个变量是cls,也就是这里的MyTestCase

扫描二维码关注公众号,回复: 4488848 查看本文章

想在类方法里得到一般函数那样的行为,一般是用@staticmethod装饰器,但是这种直接保存1个函数的,可以直接

cls.factory = staticmethod(factory)

因为装饰器,也是一个函数。所以可以这样直接用,不需要import任何模块。

猜你喜欢

转载自www.cnblogs.com/xuanmanstein/p/10113383.html