Проигрывает ли ООП в Python по сравнению с C#, С++ или Java?

Изучаю Python и обнаружил для себя удивительную вещь. В Python есть только public и private! А как же protected?
Хочется узнать, на сколько хуже ООП реализовано в Python по сравнению с теми же плюсами или Java? И есть ли еще какие нюансы у Python, связанные с ООП.
  • Вопрос задан
  • 12449 просмотров
Пригласить эксперта
Ответы на вопрос 5
crazyzubr
@crazyzubr
Python backend-developer
Private, protected and public in Python

есть ли еще какие нюансы у Python, связанные с ООП

Нюанс заключается в том, что это все условно.
Ответ написан
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Странный вопрос, поскольку по сути модификаторы доступа имеют очень слабое отношение к инкапсуляции. Инкапсуляцию следует понимать не так, что это вообще чёрный ящик (хотя идеал именно такой, но мы же знаем, что идеалов не бывает). Инкапсуляция, это когда такой код:

class Foo:
	A = None


foo = Foo()
# some code here
if foo.A is not  None:
	# continue execute right way
else:
	exit(1)


становиться каким-то таким:
class Foo:
	class PropertyUsedBeforeInit(Exception):
		pass
	_a = None
	@property
	def a(self):
		if self._a is not None:
			return self._a
		else:
			raise self.PropertyUsedBeforeInit()
	@property.setter
	def a(self, val):
		self._a = val

try:
	foo = Foo()
	# just write ur code here
except Foo.PropertyUsedBeforeInit:
	exit(1)
finally:
	exit(0)


Этот пример довольно синтетический, поэтому "лучший" вариант больше в размерах, однако, полезно заметить, что стоит добавить классов, добавить свойств, добавить вариантов вылета, как второй вариант внезапно становиться...

Хотя, на самом деле, на вкус и цвет друзей нет. Python крут тем, что он многогранен. Его можно использовать в тяжёлом энтерпрайзе (второй вариант), его можно использовать и для лабораторных в универе (первый вариант), его можно использовать и для домашних проектов (любой вариант). Его можно использовать везде. Его можно компилировать во что угодно. И его архитектура устроена именно таким образом - дать свободу. А модификаторы доступа - это то, за чем в общем-то должен следить программист. А соглашения помогают разрабатывать и использовать модули (библиотеки).

Ну, а по поводу того, кто круче. На моё "ИМХО", Python таки в чём-то круче. В нём реализованы те вещи, которых нет в C++ и Java вместе взятые и при этом они реализованы лаконично и прозрачно. Взять те же декораторы: очень простая штука. Ну просто невероятно простая. А имеем что? Очень мощный инструмент. Плюсам и джавам потребовалось бы невероятное усилие, чтобы реализовать что-то подобное. Да что там, они анонимную функцию делали сто лет.
Ответ написан
maaGames
@maaGames
Погроммирую программы
Есть точка зрения, что С++ и Ява вообще не ООП языки, с точки зрения формального ООП.
А вообще, это просто буквы. Можно хоть батники в ОО стиле писать.
Ответ написан
@mamkaololosha
> хуже ООП реализовано
На питоне пишут скрипты, тесты и фронтенд к Java/C++. Так что оно там такое, насколько минимальным оно может быть для вхождения.
Ответ написан
lightarhont
@lightarhont
python/php developer
В нём всё является объектом, как может проигрывать...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы