Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 3, 2011 19:19:41

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

аналог __str__() для класса

Здравствуйте.
Подскажите, какой метод вызывается при строковом отображении/печати класса (не обьекта)?

>>> class A():
pass

>>> print A
__main__.A



Офлайн

#2 Окт. 3, 2011 20:29:12

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

аналог __str__() для класса

Yurietc
а чем тебе класс не объект? :) такой же объект, у него есть __str__() и __repr__().



Отредактировано (Окт. 3, 2011 20:29:31)

Офлайн

#3 Окт. 3, 2011 20:37:59

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

аналог __str__() для класса

class TypeFoo(type):
def __str__(cls):
return '--%s--'%cls.__name__

class Foo(object):
__metaclass__ = TypeFoo

class Bar(Foo):
pass
>>> assert str(Foo) == '--Foo--'
>>> assert str(Bar) == '--Bar--'
>>>
..bw



Отредактировано (Окт. 4, 2011 00:37:54)

Офлайн

#4 Окт. 4, 2011 11:12:21

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

аналог __str__() для класса

Скорее всего придется сделать как написал bw. Нехотелось потому, что у меня несколько классов и для каждого придется создавать метакласс.
Пробовал использовать декоратор classmethod. Все как предполагалось, методу __str__() теперь не нужно передавать обьект класса, но вот беда, инструкция str(А) не вызывает метод А.__str__(), отсюда, собственно, и вопрос топика.

>>> class A():
@classmethod
def __str__(cls):
return "class A"


>>> A.__str__()
'class A'
>>> print A
__main__.A



Отредактировано (Окт. 4, 2011 11:13:53)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version