Python类方法

时间:2010-02-20 19:40:15

标签: python class

在Python中,哪种方式(风格明智)允许公共访问对象的变量?

我从不同的语言中看到了很多选项,我想知道哪些(如果有的话)是首选的Python方法?这些是我目前正在撕裂的选项:

  1. 允许直接访问对象变量(例如print(object.variable)),忽略数据隐藏
  2. 允许通过包装函数访问对象变量:

  3. class X:
        variable_a = 0
        variable_b = 0
    ...
        def get_variable_a(self):
            return self.variable_a
    

    如果这是推荐的方式,您如何命名方法? (get_variablename(),或只是variablename等?)

    每个人都为此推荐什么?

    谢谢!

4 个答案:

答案 0 :(得分:4)

在必要之前不要使用存取器;将简单属性转换为属性非常简单快捷,无需修改客户端代码。

当我写一个属性时,我使用_get_FOO()_set_FOO()作为访问者,_FOO作为属性本身。

答案 1 :(得分:3)

Python中没有“私有”变量。请查看本文档的第9.6节http://docs.python.org/tutorial/classes.html

但是有一个约定,该类的用户应该使用名称来处理变量,从下划线开始直接触摸。但是,没有任何机制可以阻止这种情况。

与错位名称相同(以2个下划线开头)。

答案 2 :(得分:2)

只允许直接访问您希望作为公共API公开的任何变量。如果您需要更改行为,您可以随时将其转换为属性。

请注意,这与信息隐藏正交。 obj.get_some_implementation_detail()并不比obj.some_implementation_detail好。

答案 3 :(得分:-1)

您可以使用

Getters和setter(类似Java)

class SomeClass(object):
  ...

  def get_x(self):
    return self._x
  def set_x(self, x):
    self._x = x

c = SomeClass()
print c.get_x()
c.set_x(10)

属性(C#之类)

class SomeClass(object):
  ...

  def get_x(self):
    return self._x
  def set_x(self, x):
    self._x = x
  x = property(get_x, set_x)

c = SomeClass()
print c.x
c.x = 10

我认为这仅仅是一种风格问题。选择你更喜欢的那个。同样适用于命名约定,选择一个约定并坚持使用。

在任何情况下,数据隐藏都可以使用伪私有变量(以两个下划线开头)完成。它们是cannot be accessed directly,而不是示例变量(_x不以两个下划线开头)。