从类函数外部传递和接收类实例(不是方法)

时间:2014-06-13 19:23:28

标签: python oop

使用Classes的许多优点之一是不需要不断更新从外部函数返回的变量值(在Class定义之外声明的函数)。这是一个例子:

class MyClass(object):
    def __init__(self, arg):
        super(MyClass, self).__init__()
        self.name = arg
    def setName(self, arg):
        self.name = arg
    def getName(self):
        return self.name        

def instanceModifier(instObject):
    instObject.setName('Some Value')

myInst=MyClass('My Name')
print myInst.getName()

instanceModifier(myInst)
print myInst.getName()

instanceModifier()函数修改了Instance的self.name变量的内容。我们不必确保更新Instance变量,因为不需要它。但我仍然想知道这是否是一个好习惯。我应该从instanceModifier()函数返回修改后的实例对象,并将返回的实例分配回实例对象,如下面的代码所示。如果不是那么为什么不呢?如果是,为什么是的?

class MyClass(object):
    def __init__(self, arg):
        super(MyClass, self).__init__()
        self.name = arg
    def setName(self, arg):
        self.name = arg
    def getName(self):
        return self.name        

def instanceModifier(instObject):
    instObject.setName('Some Value')
    return instObject

myInst=MyClass('My Name')
print myInst.getName()

myInst=instanceModifier(myInst)
print myInst.getName()

1 个答案:

答案 0 :(得分:1)

IMO最直接访问myInst.name是Pythonic。

myInst=MyClass('My Name')
print myInst.name

myInst.name = 'Some Value'
print myInst.name

除非有某种副作用或延迟查找,否则不需要使用setter / getter,即便如此,最好使用@property完成。