代码之家  ›  专栏  ›  技术社区  ›  nikow

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

  •  19
  • nikow  · 技术社区  · 16 年前

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

    但是,在属性不合适的情况下,人们最终可能会得到行为类似于getter或setter的方法。现在我的问题是:这些方法名称是否应该以 get_ / set_ ?或者,这是非Python式的冗长,因为它通常是显而易见的(人们仍然可以使用docstring来澄清不明显的情况)?

    这可能是个人品味的问题,但我想知道大多数人对此的看法。作为API用户,您更喜欢什么?

    例如,假设我们有一个代表多个城市的对象。也许有一种方法 get_city_by_postalcode(postalcode) 或者可以使用较短的方法 city_by_postalcode 我倾向于后者。

    5 回复  |  直到 2 年前
        1
  •  3
  •   Rapptz    9 年前

    通过使用以下命令,您永远不会失去让您的属性在以后表现得像getter/setter的机会 descriptors 。如果你想将属性更改为只读,你也可以用与属性同名的getter方法替换它,并用以下内容装饰它 @property 因此,我的建议是避免使用getter/setter,除非你正在开发的项目已经使用了它们,因为你以后可以随时改变主意,使属性为只读、只写或其他类型,而无需修改类的接口。

        2
  •  6
  •   Vasil    16 年前

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

        3
  •  4
  •   Jeremy Cantrell    16 年前

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

    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:

        4
  •  1
  •   mipadi    16 年前

    我见过这两种方式。我通常有Objective-C的背景 foo()/set_foo() 如果我不能使用属性(尽管我尽可能地使用属性)。不过,这其实没那么重要, 只要你始终如一 .

    (当然,在您的示例中,我不会调用该方法 get_city_by_postalcode() 完全;我可能会同意 translate_postalcode 或者在名称中使用更好的动作动词的类似内容。)

        5
  •  0
  •   Chris Cameron    16 年前

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

    假设你有一个可变的自我。_x。然后x()将返回self的值。_x、 setX(x)将设置self的值。_x