1

我想知道应该如何访问 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

谢谢!

4

3 回答 3

7

大多数情况下,只需直接访问它们。Python不是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。然后你改用a property

于 2012-12-01T17:57:24.723 回答
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

ETC...

否则,您可以使用 setter/getter(但前提是您的设计证明了它的合理性):

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!'
于 2012-12-01T18:03:59.057 回答
0

保持简单,直接访问x。如果在以后的某个时间,您决定需要封装x、进行类型/值检查等,那么您可以将其转换为属性属性,这样您就可以定义 get/set 方法而无需更改任何您现有的客户端代码。

于 2012-12-01T18:16:36.260 回答