Python OOP与PHP OOP相比如何?

Tho*_*ltz 16 php python oop comparison

我基本上想知道Python是否有任何像PHP那样的OOP缺点.PHP一直在为最后几个版本开发他们的OOP实践.它在PHP中越来越好但它仍然不完美.我是Python新手,我只是想知道Python的OOP支持是更好还是仅仅是可比的.

如果Python OOP中存在一些不遵循正确的OOP实践的问题,我肯定想知道这些.例如,PHP据我所知,不允许多重继承.

感谢大家!

编辑:如何支持公共和私人?或支持变量类型.我认为这些对于构建OOP软件非常重要.

And*_*are 21

我会说Python的OOP支持要好得多,因为它在婴儿时期被引入语言,而不是PHP将OOP固定在现有的程序模型上.

  • @orokusaki:在PHP(5.3)中OOP以什么方式乱七八糟?与Python相比,它有方法和属性的抽象类,抽象方法,接口,公共,私有和受保护的修饰符,最终修饰符...... (9认同)

Kiv*_*Kiv 8

Python的OOP支持非常强大; 它确实允许多重继承,并且所有东西都可以作为第一类对象(包括类,方法等)进行操作.

通过鸭子分型表达多态性.例如,您可以以相同的方式迭代列表,元组,字典,文件,Web资源等.

有许多小迂腐的事情都不是OO,比如使用len(list)而不是list.len()来获取序列的长度,但最好不要担心它们.

  • 通过"debatably not OO",你的意思是"不是典型的OO语法吗?" 它显然是OO,因为它是对象的__len__方法. (6认同)
  • 我喜欢Python的OO方面,但我确实厌倦了忘记在我的方法签名中输入"self". (5认同)
  • @S.洛特 - 我怀疑这正是他的意思.实现是正确的OO,但语法不是.序列长度是序列对象的一个​​方面; 理想情况下,语言语法会以这种方式表达. (3认同)
  • @Ben:执行不是比语法更重要吗?或者你认为运算符重载"不正确的OOP",因为语法错误?你更喜欢1.minus()到-1因为它更OO吗?我真的没有看到人们如何抱怨len问题. (3认同)

Sin*_*ion 7

Python的OOP模型的一个不寻常之处在于它的封装机制.基本上,Python假定程序员不做坏事,因此它不会在任何程度上保护私有成员变量或方法.

它通过修改以两个下划线开头并以少于两个结尾的成员名称来工作.此类标识符在任何地方都已更改,因此它们具有前置的类名称,并在此之前添加了一个下划线.从而:

class foo:
    def public(self):
        return self.__private()
    def __private(self):
        return 5

print foo().public()
print foo()._foo__private()
Run Code Online (Sandbox Code Playgroud)

以两个(或更多)下划线开头和结尾的名称不会被破坏,因此__init__python用于构造新实例的方法是独立的.

这是一个更详细解释它的链接.