Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Одним из аспектов необычной модели 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, используемый для построения новых экземпляров, остается в покое.

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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