Найти - Пользователи
Полная версия: В чём тайный смысл в передаче методу класса self?
Начало » Python для экспертов » В чём тайный смысл в передаче методу класса self?
1 2
pento
Всем спасибо за объяснения :)
Андрей Светлов, отдельное спасибо.

Вопрос был для меня закономерен, просто я первый раз такое встречаю.
До этого в образце ООП для меня С++ такого я не встречал. Спасибо за понимание.
xonix
>>> class A(object):
	pass
>>> a = A(); a.p()
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    a = A(); a.p()
AttributeError: 'A' object has no attribute 'p'
>>> def p(self):
	print self.d
	
>>> A.p = p; a.d = 'Hello world'
>>> a.p()
Hello world
>>> A.p(a)
Hello world
>>> 
Вот такой код промыслите. Как видите, можно классы на ходу дополнять методами, причем экземпляры автоматически обзаводятся этими же методами. Правда со встроенными классами(типами) (str, object, …) такой финт не прокатывает (( Вот где рулят руби и смоллтолк.
Андрей Светлов
Когда я писал свою простыню, она мне показалась и так достаточно длинной, чтобы приводить подобный пример. Поэтому я только упомянул о возможности динамического создания/изменения класса.
По поводу встроенных классов: я не вижу необходимости дополнять str, а тем более object. Более того, считаю, что это очень опасно.
А вот унаследоваться от str и начать наследуемый класс модифицировать “на лету” - очень полезно и всегда можно. Только не забывайте, что при работе с базовыми классам лучше использовать __new__ (от __init__ толку почти никакого). И унаследованный класс можно использовать везде, где требуется семантика str.
xonix
Андрей Светлов
Когда я писал свою простыню, она мне показалась и так достаточно длинной, чтобы приводить подобный пример. Поэтому я только упомянул о возможности динамического создания/изменения класса.
По поводу встроенных классов: я не вижу необходимости дополнять str, а тем более object. Более того, считаю, что это очень опасно.
Когда заходит речь на эту тему, я тоже иногда говорю подобные слова :), но, черт возьми, как иногда не хватает гибкости руби, смоллтолка, или хотя бы того же javascript'а.
id626249
та же проблема была, спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB