我基本上想知道Python是否像PHP一样有面向对象的缺点。PHP在最近几个版本中一直在开发他们的OOP实践。在PHP中它正在变得更好,但它仍然不是完美的。我是Python的新手,我想知道Python的OOP支持是更好还是更接近。
如果Python OOP中有一些问题没有遵循正确的OOP实践,我当然想知道这些问题。例如,据我所知,PHP不允许多重继承。
谢谢大家!
编辑:如何支持公共和私有?或者支持变量类型。我认为这些对于构建OOP软件很重要。
发布于 2009-05-27 17:12:52
我要说的是,Python的OOP支持要好得多,因为它是在语言的萌芽阶段引入的,而不是PHP,后者将OOP固定在现有的过程模型上。
发布于 2009-05-27 17:21:57
Python的OOP支持非常强大;它确实允许多重继承,并且所有东西都可以作为一级对象(包括类、方法等)进行操作。
多态性是通过鸭子类型来表达的。例如,您可以以相同的方式遍历列表、元组、字典、文件、web资源等。
有很多有争议的小问题并不是面向对象的,比如用len(list)而不是list.len()来获取序列的长度,但是最好不要担心它们。
发布于 2009-05-27 17:56:21
Python的OOP模型的一个不同寻常的方面是它的封装机制。基本上,Python假定程序员不会做坏事,因此它不会在任何程度上保护私有成员变量或方法。
它的工作原理是将以两个下划线开头、以少于两个下划线结尾的成员名称弄乱。这样的标识符在任何地方都会被更改,以便它们在类名前面加上额外的下划线。因此:
class foo:
def public(self):
return self.__private()
def __private(self):
return 5
print foo().public()
print foo()._foo__private()
以两个(或更多)下划线开头和结尾的名称没有损坏,因此保留了__init__
( python用于构造新实例的方法)。
这里有一个link更详细地解释了这一点。
https://stackoverflow.com/questions/916962
复制相似问题