我应该在Python方法名称中使用get_ / set_前缀吗?

时间:2008-12-17 14:49:54

标签: python coding-style

在Python中使用属性而不是Java风格的getter,setter。所以人们很少在类的公共接口中看到get ...或set ..方法。

但是如果某个属性不合适,那么最终可能会遇到类似于getter或setter的方法。现在我的问题:这些方法名称应该以{{1​​}} / get_开头吗?或者是这种单声道的冗长,因为它通常很明显是什么意思(并且仍然可以使用文档字符串来澄清非显而易见的情况)?

这可能是个人品味的问题,但我会对大多数人对此有何看法感兴趣?作为API用户,您更喜欢什么?

示例:假设我们有一个表示多个城市的对象。一个可能有方法set_,或者可以使用较短的名称get_city_by_postalcode(postalcode)。我倾向于后者。

5 个答案:

答案 0 :(得分:6)

您将永远不会失去使用descriptors让您的财产像getter / setter一样行事的机会。如果要将属性更改为只读,也可以使用与属性同名的getter方法替换它,并使用@property进行装饰。所以我的建议是避免使用getter / setter,除非你正在使用的项目已经使用它们,因为你可以随时改变主意,使属性只读,只读或不修改类的接口。

答案 1 :(得分:4)

如果它可用作属性(获取或设置一个值,而没有其他参数,我通常会这样做:

class Foo(object):

    def _get_x(self):
        pass

    def _set_x(self, value):
        pass

    x = property(_get_x, _set_x)

如果getter / setter比那更复杂,我会使用get_x和set_x:

答案 2 :(得分:3)

我认为越短越好,所以我倾向于更喜欢后者。但重要的是与您的项目保持一致:不要混合使用这两种方法。如果你跳进别人的项目,请保留其他开发人员最初选择的内容。

答案 3 :(得分:1)

我看到过两种方式。来自Objective-C背景,如果我不能使用属性,我通常会foo()/set_foo()(尽管我尽可能尝试使用属性)。但是,只要你保持一致就不会那么重要了。

(当然,在你的例子中,我根本不会调用方法get_city_by_postalcode();我可能会使用translate_postalcode或类似的东西,在名称中使用更好的动作动词。 )

答案 4 :(得分:0)

如果我必须使用getter / setter,我喜欢这样:

假设你有一个变量self._x。然后x()将返回self._x的值,而setX(x)将设置self._x的值