python oop与php oop相比如何?

How does Python OOP compare to PHP OOP?

我基本上想知道Python是否有像PHP那样的OOP缺点。PHP一直在为最近几个版本开发OOP实践。它在PHP中越来越好,但它仍然不完美。我对python还不熟悉,我只是想知道python的OOP支持是更好还是比较好。

如果在python oop中有一些问题不遵循正确的oop实践,我肯定会想知道这些问题。例如,据我所知,PHP不允许多重继承。

谢谢大家!

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


我想说的是,考虑到Python在其早期就被引入到语言中,而不是将OOP栓接到现有过程模型上的PHP,所以它对OOP的支持要好得多。


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

多态性通过鸭的分型来表达。例如,您可以以相同的方式遍历列表、元组、字典、文件、Web资源等等。

有很多小学究的东西都不符合OO标准,比如用len(list)而不是list.len()来获取序列的长度,但是最好不要担心它们。


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

它的工作原理是将成员的名称从两个下划线开始,以少于两个下划线结束。这样的标识符在任何地方都会发生变化,这样它们就可以在类名前面加上一个下划线。因此:

1
2
3
4
5
6
7
8
class foo:
    def public(self):
        return self.__private()
    def __private(self):
        return 5

print foo().public()
print foo()._foo__private()

以两个(或多个)下划线开头和结尾的名称不会被破坏,因此Python用于构建新实例的方法__init__是单独使用的。

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


另外:与PHP不同,Python具有本机运算符重载(尽管它确实存在扩展)。不管你爱还是恨,它就在那里。


我认为在这一点上它们是可比的。作为一个简单的测试,我怀疑在企业应用程序体系结构的设计模式或模式中有任何模式,可以说是OOP中最具影响力的两本书,这两种语言都不可能实现。

这两种语言自诞生以来都有了飞跃。

就多重继承而言,它经常会产生比它解决的问题更多的问题,而且,现在,作为一个有意的设计决策,语言通常被排除在外。


如果你在寻找"更纯粹"的OOP,你应该看看Smalltalk和/或Ruby。

随着对OOP的支持,PHP已经有了很大的发展,但是由于它的工作方式(每次都重新加载所有内容),如果遵循OOP最佳实践,事情可能会变得非常缓慢。这就是您不太了解PHP在Rails上的原因之一。