我想知道如何在python类中访问实例变量。我应该为每个实例变量创建一个方法,还是应该直接访问它们?
以下是一个例子:
class Example(object):
def __init__(self):
self.x = 5
def getX(self):
return self.x
def addYtoX(self, y):
return self.x + y # OR: return self.getX() + y
谢谢!
答案 0 :(得分:7)
大多数情况下,只需直接访问它们。 Python is not Java。
class Example(object):
def __init__(self):
self.x = 5
def addYtoX(self, y):
return self.x + y
在Java中,您必须使用getter和setter,因为您无法改变主意并在以后将公共字段更改为getter和setter。在python中,你可以,所以在你真正需要之前不要使用getter和setter。然后切换到property
代替。
答案 1 :(得分:1)
如果没有理由提供任何形式的检查,那么Python允许您直接添加/删除/设置值
class A(object):
def __init__(self):
self.some_var = 5
a = A()
a.other_var = 6
print a.some_var
a.some_var = 123456
del a.some_var
等...
否则,您可以使用setter / getters(但只有在您的设计合理的情况下):
class A(object):
def __init__(self):
self._some_var = 5 # note the _
@property
def some_var(self):
return self._some_var
@some_var.setter
def some_var(self, val):
if val > 5:
self._some_var = val
else:
print 'Nope - can not do that!'
答案 2 :(得分:0)
保持简单,只需直接访问x
即可。如果稍后您决定需要封装x
,请键入/值检查等,然后您可以将其转换为property attribute,这样您就可以定义get /无需更改任何现有客户端代码即可设置方法。