我试着这么做:
import unittest
def decorator(cls):
class Decorator(cls):
def __init__(self, *args, **kwargs):
super(Decorator, self).__init__(*args, **kwargs)
return Decorator
@decorator
class myClass(unittest.TestCase):
def __init__(self, *args, **kwargs):
super(myClass, self).__init__(*args, **kwargs)
self.test = 'test'
def test_test(self):
pass
myClass().run()
但是我得到了MyClass.__init__
中的递归。有什么办法可以避免这种情况吗?在
不能以这种方式在修饰类中使用
super(myClass, self)
。在myClass
被作为一个全局查找,而全局{Decorator
,因此您告诉Python从Decorator
开始在类MRO中查找__init__
,它调用super(myClass, self).__init__()
,将{Decorator
,等等最简单的解决方法是不要在此处使用
super()
:这就是Python3中引入
super()
的无参数版本的原因之一,而是给方法一个__class__
单元格。在您可以跳过一些(非常棘手的)循环来重新编译
myClass.__init__()
方法,从而给它一个绑定到原始未修饰类对象的myClass
闭包,但是对于unittest,我不会费心。在相关问题 更多 >
编程相关推荐