Python中私有字段的策略

Python中私有字段的策略,python,field,private,Python,Field,Private,我有下面的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__(

我有下面的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私有变量和函数建模,可以将该策略扩展到获取和设置之外,我知道这可能会导致一些难以处理的代码——比如说,我们不担心优雅。这种类型的编程有名字吗?

一个有决心的用户仍然可以通过

f.get.__closure__[0].cell_contents.value
f.get.__closure__[0].cell_contents.value = "some new value"

这种编程方式的一般缺点是,您所做的只是为自己创建更多的工作,尽管做了这么多工作,您仍然无法真正阻止任何人访问私人数据。

不要走这条路。如果需要为获取和设置Python类的特定名称提供特殊行为,请使用属性:这种类型的编程称为shoehorn驱动开发;是的,我真的根本不需要这么做,我是在一个更复杂的场景中偶然做的——我觉得这不是真正的隐私,我只是想知道我的想法在哪里动摇了。谢谢你的名字,虽然当我在谷歌上搜索的时候,没有什么东西会弹出:我认为鞋业驱动的开发是开玩笑的。名字是TimeWastingThank,就是这样。我不确定是否有可能打破混乱局面: