我在使用Python中的面向对象编程(OPP)/类/实例时,是否应该始终使用getAttr() / setAttr()来读写类属性/变量?或者直接处理变量/属性(例如self.my_attr =“some_value”)会更好一些?
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.my_attr = 'My_Value'
def doSomething(self):
localVariable = self.my_attr
print localVariable
使用类的方法访问类的属性
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.my_attr = 'My_Value'
def getMyAttr(self):
return self.my_attr
def doSomething(self):
localVariable = self.my_attr
print localVariable
稍后编辑:
在阅读《面向对象的思维过程》(Matt Weisfeld:开发人员图书馆)时,作者一直在不断强调:
"......对象内部属性的访问应该由对象本身控制——其他对象不应该直接更改另一个对象的属性..."
"......如果你控制了属性的访问,在问题出现时,你就不必担心追踪可能已经更改属性的每一行代码——它只能在一个地方(即setter)被更改..."
因此,我将坚持使用setter和getter。这里建议/提到了Python的@property和@.setter,这使得它甚至更容易。