在python中模拟私有变量

Che*_*ery 5 python oop private

可能重复:
python中的私有成员

我有一些我真想隐藏的变量,因为它们不属于我的课堂.所有这些未记录的变量都会使继承变得无用.

如何隐藏您不希望在对象外显示的变量?

为了澄清为什么我需要私有变量,首先一个无法隐藏变量的例子只是一个不便,然后另一个真的是一个问题:

class MyObject(object):
    def __init__(self, length):
        self.length = length
    def __len__(self):
        return length

item = MyObject(5)
item.length
len(item)
Run Code Online (Sandbox Code Playgroud)

所以我有两种方法可以在这里访问项目的"长度".这只是一个不便而且没什么可怕的.

from wares import ImplementationSpecific

class MyThing(object):
    def __init__(self):
        self.__no_access_even_if_useful = ImplementationSpecific()
    def restricted_access(self):
        return self.__no_access_even_if_useful.mutable_value

thing = MyThing()
thing.restricted_access()
thing._MyThing__no_access_even_if_useful.something_useful_for_someone()
Run Code Online (Sandbox Code Playgroud)

所以说我希望有一天能改变实现......除非我真的埋没了实现细节,否则很有可能会破坏它.

我会接受它,因为任何人都可以编程.那个'任何人'可以从我的实现细节中找到一个有用的东西并使用它,即使我强烈劝阻这样做!只是说:"不,它不存在,尝试别的东西."

Mar*_*ers 15

私有变量包含在Python 文档中:

9.6.私人变量

Python中不存在除了从对象内部访问之外无法访问的"私有"实例变量.但是,大多数Python代码都遵循一个约定:前缀为下划线的名称(例如_spam)应被视为API的非公共部分(无论是函数,方法还是数据成员) .它应被视为实施细节,如有更改,恕不另行通知.

摘要:在名称前使用下划线.


DrD*_*Dee 11

Python文档:

Python中不存在除了从对象内部访问之外无法访问的"私有"实例变量.但是,大多数Python代码都遵循一个约定:前缀为下划线的名称(例如_spam)应被视为API的非公共部分(无论是函数,方法还是数据成员) .它应被视为实施细节,如有更改,恕不另行通知.