Как Python OOP сравнивается с PHP OOP?
Я в основном задаюсь вопросом, есть ли у Python какие-либо недостатки ООП, такие как PHP. PHP разрабатывает свои методы ООП для последних нескольких версий. В PHP все налаживается, но это все еще не идеально. Я новичок в Python, и мне просто интересно, лучше ли поддержка POPON OOP лучше или просто сопоставима.
Если в Python OOP есть некоторые проблемы, которые не соответствуют надлежащим методам ООП, я бы определенно хотел их знать. PHP, например, не допускает множественного наследования, насколько мне известно.
Всем спасибо!
Изменить: как насчет поддержки для государственных и частных? или поддержки переменных типов. Я думаю, что они важны для создания программного обеспечения OOP.
- Могу ли я сделать «string содержит X» с процентной точностью в python?
- Найти совпадающие точки в 2 отдельных массивах numpy
- Сравнение 2 списков списков (String и array)
- Сравнение элементов массивов numpy в python
- как сравнить для равенства для объектов None в пользовательском классе в python?
Я бы сказал, что поддержка 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.
- Используйте сравнение Python 2 Dict в Python 3
- Сравните 2 .csv-файлы с Python, затем выводят результаты
- Использование python для поиска повторяющихся имен в txt-файле
- Python: сравнение нескольких тысяч строк. Любые быстрые альтернативы для сравнения?
- Python – Сравнить список списков и выбрать наибольшее значение
- Оценка сходства двух списков со строками
- Можно ли использовать pandas.dataframe.isin () с числовым параметром допуска?
- Целочисленный диапазон числа сравнения в Python
- итерация по массиву с несколькими значениями