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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оба языка развивались стремительно и быстро.

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

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

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

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