Python OOP与PHP OOP的比较如何?

17 投票
6 回答
3977 浏览
提问于 2025-04-15 11:52

我想知道Python在面向对象编程(OOP)方面有没有像PHP那样的不足之处。PHP在最近几个版本中一直在改进它的面向对象编程方式,虽然变得更好了,但还是不完美。我刚开始学习Python,想知道Python的面向对象支持是更好还是差不多。

如果Python的面向对象编程有一些不符合标准做法的问题,我当然想知道这些。比如,PHP好像不支持多重继承。

谢谢大家!

补充一下:那Python对公共和私有属性的支持怎么样?还有对变量类型的支持呢?我觉得这些在构建面向对象的软件时很重要。

6 个回答

8

Python的面向对象编程(OOP)模型有一个比较特别的地方,就是它的封装机制。简单来说,Python认为程序员不会做坏事,所以它并不会特别去保护那些私有的成员变量或方法。

它的工作原理是:如果一个成员的名字是以两个下划线开头,并且后面跟着少于两个下划线,Python会对这个名字进行“变形”。变形的方式是把类名加在前面,并在前面再加一个下划线。这样就变成了:

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

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

以两个(或更多)下划线开头和结尾的名字不会被变形,所以像__init__这个方法(Python用来创建新实例的方法)就不会被改变。

这里有一个链接,可以更详细地解释这个内容。

8

Python的面向对象编程支持非常强大;它允许多重继承,也就是说一个类可以继承多个父类。而且在Python中,几乎所有东西都可以像普通对象一样进行操作,包括类、方法等等。

多态性通过“鸭子类型”来实现。简单来说,就是你可以用同样的方式去遍历一个列表、元组、字典、文件、网页资源等等。

有很多小细节可能有人会争论它们算不算面向对象,比如用len(list)来获取序列的长度,而不是用list.len(),但这些细节其实不用太在意。

20

我觉得Python的面向对象编程(OOP)支持要好得多,因为它在语言刚开始的时候就引入了这个特性。而PHP则是在已有的过程式编程基础上加上了面向对象的功能。

撰写回答