2024-06-16 11:40:39 发布
网友
我不知道这里是否有一个好的设计,但是我有一个从unittest.TestCase派生的类,以及我设置它的方式,在调用unittest运行它之前,我的代码将动态地向该类中注入一堆test_*方法。我用setattr来做这个。这一直工作得很好,但现在我有一个情况,我想删除我以前注入的方法,并注入一套新的方法。如何删除名称与模式匹配的类中的所有方法test_*?
test_*
setattr
>>> class Foo: def func(self): pass ... >>> dir(Foo) ['__doc__', '__module__', 'func'] >>> del Foo.func >>> dir(Foo) ['__doc__', '__module__']
它被称为delattr,并被记录为here。
delattr
delattr()就是你想要的。循环遍历类的vars(),并测试以"test_"开头的属性名。E、 g
delattr()
vars()
"test_"
@classmethod def remove_test_methods(cls): for name in list(vars(cls)): if name.startswith("test_") and callable(getattr(cls, name)): delattr(cls, name)
我建议不要使用dir(),因为这也会显示来自父类的名称,所以并非所有从dir()获得的名称都可以在目标类上定义。
dir()
它被称为
delattr
,并被记录为here。delattr()
就是你想要的。循环遍历类的vars()
,并测试以"test_"
开头的属性名。E、 g我建议不要使用
dir()
,因为这也会显示来自父类的名称,所以并非所有从dir()
获得的名称都可以在目标类上定义。相关问题 更多 >
编程相关推荐