Python OOP与PHP OOP相比如何?

时间:2009-05-27 17:09:28

标签: php python oop comparison

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

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

谢谢大家!

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

6 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:7)

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

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

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

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

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

这是一个link更详细地解释它。

答案 3 :(得分:3)

我认为他们在这一点上具有可比性。作为一个简单的测试,我怀疑Design PatternsPatterns of Enterprise Application Architecture中有任何模式,可以说是OOP中最具影响力的两本书,这两种语言都无法实现。

自从他们的婴儿出生以来,这两种语言都有了突飞猛进的发展。

就多重继承而言,它往往creates more problems than it solves,而且现在通常被排除在语言之外作为有意的设计决策。

答案 4 :(得分:3)

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

答案 5 :(得分:1)

如果您正在寻找“更纯粹”的OOP,您应该关注SmallTalk和/或Ruby。

PHP随着它对OOP的支持而大大增加,但由于它的工作方式(每次重新加载所有内容),如果遵循OOP最佳实践,事情会变得非常缓慢。这是你在Rails上没有听说过PHP的原因之一。