Oop 最佳实践:通过get/set抽象数据还是允许访问变量?
前几天我写了一些python类,创建了一个类似这样的类:Oop 最佳实践:通过get/set抽象数据还是允许访问变量?,oop,Oop,前几天我写了一些python类,创建了一个类似这样的类: class Option: Name = "" Description = "" Criteria = {} def __init__(self, name, descr): self.Name = name self.Description = descr def addCriteria(self, cname, ctype): ...
class Option:
Name = ""
Description = ""
Criteria = {}
def __init__(self, name, descr):
self.Name = name
self.Description = descr
def addCriteria(self, cname, ctype):
...
在我的程序中,我直接访问类中的数据,即:
cname = opt.Name
虽然这是一个有意识的决定,但我知道很多类都会将其抽象为:
cname = opt.getName()
我是否应该花时间提取所有数据而不允许直接访问?当您为类数据添加访问方法时,会触发什么
Mike尽管这与您在OOP中学到的任何东西都背道而驰,但我建议您推迟做出决定,直到事实证明,您需要在Attribute access上使用一些“魔法”。在Python中,使用特殊的
属性
函数重构提供属性的类非常容易:
class ItsMagic(object):
_name = None
def _get_name(self):
return self._name
def _set_name(self, new_name):
self._name = new_name
Name = property(_get_name, _set_name)
magic = ItsMagic()
magic.Name = "Foo"
这对此类的客户机是透明的,也就是说,他们通常不知道(也不应该关心)属性引用是通过提供对实际对象属性的访问来处理的,还是通过magic getter/setter函数来处理的,并且可以在以后应用(如果事实证明需要的话)