Ответ 1
Я бы сказал, что поддержка OOP Python намного лучше, учитывая тот факт, что она была введена в язык в зачаточном состоянии, а не в PHP, который закрепил ООП в существующей процедурной модели.
Я в основном задаюсь вопросом, есть ли у Python какие-либо недостатки ООП, такие как PHP. PHP разрабатывает свои методы ООП для последних нескольких версий. Он становится лучше на PHP, но он все еще не идеален. Я новичок в Python, и мне просто интересно, лучше ли поддержка Python OOP или просто сопоставима.
Если в Python OOP есть некоторые проблемы, которые не соответствуют надлежащим методам ООП, я бы определенно хотел их знать. PHP, например, не допускает множественного наследования, насколько мне известно.
Спасибо всем!
Изменить: Как насчет поддержки государственных и частных? или поддержки переменных типов. Я думаю, что они важны для создания программного обеспечения OOP.
Я бы сказал, что поддержка OOP Python намного лучше, учитывая тот факт, что она была введена в язык в зачаточном состоянии, а не в PHP, который закрепил ООП в существующей процедурной модели.
Поддержка Python OOP очень сильна; он допускает множественное наследование, и все манипулируется как объект первого класса (включая классы, методы и т.д.).
Полиморфизм выражается через утиную типизацию. Например, вы можете перебирать список, кортеж, словарь, файл, веб-ресурс и т.д. Таким же образом.
Есть много маленьких педантичных вещей, которые дебатически не OO, например, получение длины последовательности с len (list), а не list.len(), но лучше не беспокоиться о них.
Одним из аспектов необычной модели 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, используемый для построения новых экземпляров, остается в покое.
Здесь ссылка , объясняющая это более подробно.
Я думаю, что они сейчас сравнимы. В качестве простого теста я сомневаюсь, что в Design Patterns или Шаблоны архитектуры корпоративных приложений, возможно, две наиболее влиятельные книги в ООП, которые невозможно реализовать на любом языке.
Оба языка приходят по прыжкам и границам с момента их появления.
Что касается множественного наследования, часто создает больше проблем, чем решает, и, в наши дни, обычно упускается из языков как преднамеренное дизайнерское решение.
Также: Python имеет встроенную перегрузку оператора, в отличие от PHP (хотя в нем существует расширение). Любите это или ненавидите, это там.
Если вы ищете "более чистый" ООП, вы должны смотреть на SmallTalk и/или Ruby.
PHP значительно вырос благодаря поддержке OOP, но из-за того, как он работает (каждый раз перезагружает все), все может быть очень медленным, если следовать рекомендациям ООП. Это одна из причин, по которым вы не очень хорошо разбираетесь в PHP на Rails.