Getter和Setter用于Python中的成员变量

时间:2014-01-27 08:46:08

标签: python

我知道不建议在Python中为类成员变量编写getter和setter。我仍然需要这样做,因为我有一个复杂的对象,内部包含很多深度的对象。我需要在容器对象中公开一个属性/函数,它将获取和/或设置内部对象的成员。我怎么能用Python做到这一点?

def responseoperationcode(self,operationcode=None):
    if operationcode:
        self.innerobject.operationcode=operationcode
    else:
        return self.innerobject.operationcode

以上给定的函数可以充当getter和setter,但使用它的语法会令人困惑。我的要求是用户应该在不使用括号的情况下获取其值,并设置他应该传递参数的值。像这样的东西

objectname.responseoperationcode ##this should return the value

objectname.responseoperationcode("SUCCESS")##this should set the value

请建议。

2 个答案:

答案 0 :(得分:8)

Python支持properties。您可以将代码更改为:

@property
def responseoperationcode(self):
    return self.innerobject.operationcode

@responseoperationcode.setter    
def responseoperationcode(self, value):    
    self.innerobject.operationcode = value

现在您可以像字段一样使用responseoperationcode函数,例如:

objectname.responseoperationcode # this returns the value
objectname.responseoperationcode = "SUCCESS" # this sets the value

答案 1 :(得分:1)

好吧,如果你有权访问内部对象的定义,你可以在那里编写一个getter方法。然后整件事情看起来就像这样:

class OuterObject:
    innerObject        

    def getInnerField(self, field=None):
        if field == None: 
            return self.innerObject.getField()
        else:
            self.innerObject.setField(field)



class InnerObject:
    field

    def getField(self):
        return self.field

    def setField(self, field):
        self.field = field