Как ООП на Python сравнивается с ООП на PHP?


Мне в основном интересно, есть ли у Python какие-либо недостатки в ООП, как у PHP. PHP развивает свои методы ООП в течение последних нескольких версий. Это становится лучше в PHP, но все еще не идеально. Я новичок в Python, и мне просто интересно, лучше ли поддержка ООП Python или просто сопоставима.

Если в Python ООП есть какие-то проблемы, которые не соответствуют надлежащей практике ООП, я определенно хотел бы знать об этом. PHP, например, не допускает множественного наследования насколько мне известно.

Спасибо Всем!

Редактировать: Как насчет поддержки государственного и частного секторов? или поддержка типов переменных. Я думаю, что это важно для создания программного обеспечения ООП.

Author: Thomas Schultz, 2009-05-27

6 answers

Я бы сказал, что поддержка ООП Python намного лучше, учитывая тот факт, что она была введена в язык в зачаточном состоянии, в отличие от PHP, который привязал ООП к существующей процедурной модели.

 21
Author: Andrew Hare, 2009-05-27 17:12:51

Поддержка ООП Python очень сильна; она допускает множественное наследование, и всем можно управлять как первоклассным объектом (включая классы, методы и т.д.).

Полиморфизм выражается через типирование уток. Например, вы можете повторять список, кортеж, словарь, файл, веб-ресурс и многое другое одним и тем же способом.

Есть много маленьких педантичных вещей, которые спорно не являются OO, например, получение длины последовательности с помощью len(список), а не list.len(), но лучше не беспокоиться о них.

 8
Author: Kiv, 2009-05-27 17:21:57

Одним из необычных аспектов модели ООП Python является ее механизм инкапсуляции. В принципе, Python предполагает, что программисты не делают плохих вещей, и поэтому он ни в коей мере не старается защитить частные переменные-члены или методы.

Он работает, искажая имена участников, которые начинаются с двух подчеркиваний и заканчиваются менее чем двумя. Такие идентификаторы повсеместно изменяются таким образом, чтобы к ним добавлялось имя класса с дополнительным подчеркиванием перед тот. таким образом:

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

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

Имена, начинающиеся и заканчивающиеся двумя (или более) символами подчеркивания, не искажаются, поэтому __init__ метод, используемый python для создания новых экземпляров, остается в покое.

Вот ссылка , объясняющая это более подробно.

 7
Author: SingleNegationElimination, 2009-05-28 01:29:42

Я думаю, что на данный момент они сопоставимы. В качестве простого теста я сомневаюсь, что в Шаблонах проектирования или Шаблонах архитектуры корпоративных приложений, возможно, двух самых влиятельных книгах по ООП, есть какой-либо шаблон, который невозможно реализовать ни на одном из языков.

Оба языка развивались семимильными шагами с момента их зарождения.

Что касается множественного наследования, то оно часто создает больше проблем, чем решает , и в наши дни, обычно исключается из языков как преднамеренное дизайнерское решение.

 3
Author: Triptych, 2009-05-27 17:16:37

Также: Python имеет собственную перегрузку операторов, в отличие от PHP (хотя у него есть расширение). Нравится вам это или нет, но это есть.

 3
Author: Emil H, 2009-05-27 17:35:30

Если вы ищете "более чистый" ООП, вам следует обратить внимание на SmallTalk и/или Ruby.

PHP значительно вырос благодаря поддержке ООП, но из-за того, как он работает (перезагружает все каждый раз), все может стать очень медленным, если следовать рекомендациям ООП. Это одна из причин, по которой вы мало слышите о PHP на Rails.

 1
Author: Brent Baisley, 2009-05-27 17:35:45