可以使用什么命名约定来区分属性和方法?

时间:2015-06-06 23:14:50

标签: python mocking

在我的项目中,我有许多类似名称模式的方法和属性,如“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的模拟对象只能检查属性名是否有效,它无法帮助您检查属性是否被误用为方法。

所以我想也许我应该使用命名约定来区分方法和属性。

1 个答案:

答案 0 :(得分:1)

请访问 - https://www.python.org/dev/peps/pep-0008/

我用于项目的偏好

  1. 班级名称 - Capwords - 例如StoreManaget
  2. 方法名称 - 以下划线分隔的大写字母 - 例如 - Get_Store_Item
  3. 属性名称 - 带有下划线的单词的小写 - 例如 - store_location
  4. 全局属性名称 - 小写字母,以下划线分隔(以g_为前缀) - 例如 - g_store_id
  5. 常量名称 - 大写 - 例如TOTAL
  6. 约定可能因人而异,但这些命名约定有助于我不要进入需要花时间确定属性是否为Method / Varible / Constant / Global变量的情况。