为什么Python不完全面向对象?

Meh*_*ahi 51 python oop

我想知道为什么Python不是完全面向对象的.例如,它不支持私有,公共,受保护的访问级别修饰符.

这有什么优缺点?通过这些表达式,Python适用于哪些应用程序(桌面,科学,Web或其他)?

Mar*_*tos 88

Python不支持强封装,这只是与"面向对象"一词相关的众多功能之一.

答案就是哲学.Guido不喜欢隐藏东西,Python社区中的许多人都赞同他.

  • +1,正确答案.虽然我会说:Python不强制执行(信息隐藏/封装)*.obj._field是"私有的",因为惯用的python代码除非必要,否则不会访问它(dir()函数,反射,序列化,不得不破解无法更改的遗留代码的限制).并且Python比例如Java或C++或C#更加OO,因为没有原语. (9认同)
  • 仅供参考:C#的原语实际上是从System.ValueType派生的,它是从System.Object派生的.事实上,C#是我所知道的唯一真正的OO语言,因为一切都是对象. (8认同)
  • @Motig Ruby也是真正的OO. (4认同)

vir*_*tor 42

Guido曾经说过"我们都同意这里的成年人".这是很久以前的更长的解释:http://mail.python.org/pipermail/tutor/2003-October/025932.html

有一个强调协议意味着私有元素,你不应该使用它们.除非你知道你在做什么,而你真的想要.

该链接还提到了另一种方法,以便将其用于Perl:

"Perl模块更愿意你没有
被邀请,因为你没有被邀请,而是因为它没有霰弹枪而离开了它的起居室."

  • 喜欢引用。我相信拥有私有实例变量不仅仅是为了防止程序员“进入你的客厅”。在许多常见情况下(尤其是在 setter 方法中),无论出于何种原因,您希望对象在对象内部存储某些数据之前对其进行更改或格式化。在这种情况下,您不能指望其他程序员知道应如何存储或访问该变量。所有这些逻辑都可以封装在 getter 和 setter 方法中。让伊瓦尔暴露在外是混乱/令人困惑/误导的。这几乎是我保护隐私的唯一理由。 (2认同)

Dan*_*llo 12

基于类的编程不需要访问修饰符(公共,私有,受保护等).它们只是一个功能,就像多重继承一样.