我基本上想知道Python是否有任何像PHP那样的OOP缺点。 PHP一直在为最后几个版本开发他们的OOP实践。它在PHP中越来越好但它仍然不完美。我是Python新手,我只是想知道Python的OOP支持是更好还是仅仅是可比的。
如果Python OOP中存在一些不遵循正确OOP实践的问题,我肯定想知道这些问题。例如,PHP据我所知,不允许多重继承。
谢谢大家!
编辑: 对公共和私人的支持如何?或支持变量类型。我认为这些对于构建OOP软件很重要。
答案 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 Patterns或Patterns 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的原因之一。