Уведомления

Группа в Telegram: присоединиться

#1 Июнь 7, 2007 18:33:24

pento
От:
Зарегистрирован: 2007-05-29
Сообщения: 100
Репутация: +  0  -
Профиль   Отправить e-mail  

В чём тайный смысл в передаче методу класса self?

Всем спасибо за объяснения :)
Андрей Светлов, отдельное спасибо.

Вопрос был для меня закономерен, просто я первый раз такое встречаю.
До этого в образце ООП для меня С++ такого я не встречал. Спасибо за понимание.



Отредактировано (Июнь 7, 2007 18:54:58)

Офлайн

#2 Июнь 8, 2007 17:49:42

xonix
От:
Зарегистрирован: 2006-12-31
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В чём тайный смысл в передаче методу класса self?

>>> 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, …) такой финт не прокатывает (( Вот где рулят руби и смоллтолк.



Офлайн

#3 Июнь 8, 2007 22:46:38

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

В чём тайный смысл в передаче методу класса self?

Когда я писал свою простыню, она мне показалась и так достаточно длинной, чтобы приводить подобный пример. Поэтому я только упомянул о возможности динамического создания/изменения класса.
По поводу встроенных классов: я не вижу необходимости дополнять str, а тем более object. Более того, считаю, что это очень опасно.
А вот унаследоваться от str и начать наследуемый класс модифицировать “на лету” - очень полезно и всегда можно. Только не забывайте, что при работе с базовыми классам лучше использовать __new__ (от __init__ толку почти никакого). И унаследованный класс можно использовать везде, где требуется семантика str.



Офлайн

#4 Июнь 9, 2007 03:15:01

xonix
От:
Зарегистрирован: 2006-12-31
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В чём тайный смысл в передаче методу класса self?

Андрей Светлов
Когда я писал свою простыню, она мне показалась и так достаточно длинной, чтобы приводить подобный пример. Поэтому я только упомянул о возможности динамического создания/изменения класса.
По поводу встроенных классов: я не вижу необходимости дополнять str, а тем более object. Более того, считаю, что это очень опасно.
Когда заходит речь на эту тему, я тоже иногда говорю подобные слова :), но, черт возьми, как иногда не хватает гибкости руби, смоллтолка, или хотя бы того же javascript'а.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version