2014-03-26 40 views
7

为什么python没有像c#中那样的访问修饰符,java是public,private等什么是封装和信息隐藏在python中的替代方式。为什么python没有访问修饰符?在python中有什么替代方法?

+0

参见[这里](http://docs.python.org/3/tutorial/classes.html?highlight=private#private-variables)。 – Marius

+4

因为Python不是C#或Java。为什么这些语言没有动态类型和重要的空白?因为他们不是Python。 –

+1

@DanielRoseman我同意,但我理解它对于习惯于传统主流OO语言(如Java或C++)的人可能产生的震撼。当我开始学习python时,我感到震惊。 –

回答

8

Wikipedia

[Python的]有使用name mangling私有变量有限的支持。请参阅"Classes" section of the tutorial for details。许多 Python用户并不觉得需要私有变量。这个口号"We're all consenting adults here"用于描述这种态度。有些人认为信息隐藏是不合理的,在 ,它表明该类别包含不美观或 计划不周的内部。然而,名称 强化的最强争论是防止程序不可预知的破坏: 在超类中引入新的公共变量可能会破坏子类 ,如果它们不使用“私有”变量。

从教程: 由于是模块真正 ,在Python类没有一个绝对的屏障 定义和用户之间的,而是依赖于用户不 以“破坏定义的礼貌。 “

同样的情绪在012​​款The Hitchhiker’s Guide to Python!

4

另一种方法是命名描述你的“私人”(它们不是用Python真正私有的)使用标识符,可以轻松识别那些成员不应该从外面使用。

例如:

class RedmineWriter: 

    __server = None 
    __connected = False 
... 
... 
... 

但是,如果用户类真正想改变这些属性,他不会有任何问题。他的责任是不这样做。

看:http://docs.python.org/2/tutorial/classes.html#tut-private

+0

双引号下划线会导致名称损坏,如果您希望子类不处理这些成员,这非常有用。如果没有子类,或者它们需要与这些成员进行交互(如许多静态语言中的'protected'),那么一个*单独的*前导下划线更加习惯。 – delnan

相关问题