在Python中使用属性而不是Java风格的getter,setter。所以人们很少在类的公共接口中看到get ...或set ..方法。
但是如果某个属性不合适,那么最终可能会遇到类似于getter或setter的方法。现在我的问题:这些方法名称应该以{{1}} / get_
开头吗?或者是这种单声道的冗长,因为它通常很明显是什么意思(并且仍然可以使用文档字符串来澄清非显而易见的情况)?
这可能是个人品味的问题,但我会对大多数人对此有何看法感兴趣?作为API用户,您更喜欢什么?
示例:假设我们有一个表示多个城市的对象。一个可能有方法set_
,或者可以使用较短的名称get_city_by_postalcode(postalcode)
。我倾向于后者。
答案 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的值