在我的项目中,我有许多类似名称模式的方法和属性,如“is_ ”,“has _ ”等。
我必须记得每次检查obj.is_ready
这样的名字是方法还是财产,但有时我可能懒得去检查。
单元测试可以帮助我避免许多这样的错误,例如,如果我试图在它实际上是一个属性时调用obj.is_ready()
,那么测试就会失败。
但并非所有错误都可以通过这种方式捕获,尤其是涉及模拟对象时,例如,我可能有一个类X:
class X(object):
@property
def is_ready(self):
return True
我以这种方式模拟X的实例:
x = Mock(spec=X)
x.is_ready.return_value = False
x.is_ready()
这很好用,因为指定spec
的模拟对象只能检查属性名是否有效,它无法帮助您检查属性是否被误用为方法。
所以我想也许我应该使用命名约定来区分方法和属性。
答案 0 :(得分:1)
请访问 - https://www.python.org/dev/peps/pep-0008/
我用于项目的偏好
约定可能因人而异,但这些命名约定有助于我不要进入需要花时间确定属性是否为Method / Varible / Constant / Global变量的情况。