我正在尝试python-koans:
定义了一个旧样式类:
class A:
pass
我们知道旧样式类没有定义__class__
。
提供了一个断言声明,我需要通过该声明。
self.assertEqual(__, A.__class__)
我应该在空白中填充一些值,即第一个参数,以便它通过。 A.__class__
会引发属性错误。我该怎么做这个测试通过?
答案 0 :(得分:1)
使用type()
而不是直接尝试访问.__class__
。对于旧式类,这将返回types.ClassType
:
>>> from types import ClassType
>>> class Foo: pass
...
>>> type(Foo) is ClassType
True
一般来说,对于每个dunder(双下划线,__...__
)名称,这些钩子都有一个API函数或运算符。使用API函数或运算符而不是直接访问钩子。例如。使用str(f)
代替f.__str__()
等
如果您要针对异常进行测试,您可能希望使用assertRaises()
context manager来测试特定的异常:
with self.assertRaises(Foo) as cm:
function_under_test()
然后,您仍可以cm.exception
访问异常实例以进行进一步测试。
答案 1 :(得分:1)
这是一个糟糕的主意,但是嘿 - Python可以让你做任何事情,对吗?
assertEqual(setattr(A, "__class__", type) or type, A.__class__)
我想我可能会作弊。
答案 2 :(得分:0)
这可能是无关紧要的,但可能的用例是将异常类等同于特定的异常类。附加示例代码
try:
1/0
except (ZeroDivisionError) as e:
pass
#equate an exception with a class of exception
isinstance(e, ZeroDivisionError)