在Python中,哪种方式(风格明智)允许公共访问对象的变量?
我从不同的语言中看到了很多选项,我想知道哪些(如果有的话)是首选的Python方法?这些是我目前正在撕裂的选项:
class X:
variable_a = 0
variable_b = 0
...
def get_variable_a(self):
return self.variable_a
如果这是推荐的方式,您如何命名方法? (get_variablename(),或只是variablename等?)
每个人都为此推荐什么?
谢谢!
露
答案 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
不以两个下划线开头)。