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

我应该在python方法名中使用get_u/set_u前缀吗?

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

    使用Python属性代替Java风格的吸收器,SETTER。所以很少看到得到…或设置…类的公共接口中的方法。

    但在某些情况下,如果一个属性不合适,那么最终可能还是会出现一些方法,它们的行为类似于getter或setter。现在我的问题是:这些方法名应该以 get_ / set_ ?或者,这是因为它往往是显而易见的含义(而且人们仍然可以使用docstring来澄清不明显的情况),所以这是一种不愉快的烦恼吗?

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

    例如:假设我们有一个表示多个城市的对象。一个人可能有一个方法 get_city_by_postalcode(postalcode) 或者可以用较短的名字 city_by_postalcode . 我倾向于晚一点。

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

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

        2
  •  6
  •   Vasil    16 年前

    你不会失去机会让你的财产表现得像一个getter/setter以后使用 descriptors . 如果要将属性更改为只读,还可以将其替换为与属性同名的getter方法,并用@property修饰它。因此,我的建议是避免使用getter/setter,除非您正在处理的项目已经使用了它们,因为您以后总是可以改变主意,使属性为只读、只写或其他,而无需修改类的接口。

        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 年前

    我看到它有两种方式。来自客观C背景,我通常会这样做 foo()/set_foo() 如果我不能使用属性(尽管我尽量使用属性)。其实没什么关系, 只要你始终如一 .

    (当然,在您的示例中,我不会调用该方法 get_city_by_postalcode() 一点也不;我可能会和 translate_postalcode 或者类似的名称中使用更好的动作动词。)

        5
  •  0
  •   Chris Cameron    16 年前

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

    假设您有一个变量self。x.then x()将返回self的值。x,set x(x)将设置self的值。x