我有以下 Python 代码,我认为它模拟了一个“私有”字段,因为我们创建了一个只能由 getter 访问并由 setter 修改的变量,而不是直接发现的。
class Foo:
def __init__( self, value ):
node = Node( value )
self.get = lambda : node.get()
self.set = lambda newValue : node.set( newValue )
class Node:
def __init__( self, value ):
self.value = value
def set( self, value ):
self.value = value
def get( self ):
return self.value
if __name__ == "__main__":
f = Foo( 17 )
print dir(f) #prints __doc__, __init__, __module__, get, set
print f.get() #prints 17
f.set(16)
print f.get() #prints 16
与 Java 不同,由于其他线程中讨论的各种原因,私有字段没有内置到 Python 中,但我想知道使用这种限制变量的方法的优点/缺点是什么?有没有不使用获取/设置方法来访问这些“私有”变量的方法?
显然,如果我们想对 Java 私有变量和函数进行建模,该策略可以扩展到获取和设置之外,而且我知道这可能会导致一些笨拙的代码——假设我们不担心优雅。这种类型的编程有名称吗?