python获取实例变量的最佳实践

时间:2012-12-01 17:55:55

标签: python

我想知道如何在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

谢谢!

3 个答案:

答案 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 /无需更改任何现有客户端代码即可设置方法。