Форум сайта python.su
Здравствуйте.
Подскажите, какой метод вызывается при строковом отображении/печати класса (не обьекта)?
>>> class A():
pass
>>> print A
__main__.A
Офлайн
Yurietc
а чем тебе класс не объект? :) такой же объект, у него есть __str__() и __repr__().
Отредактировано (Окт. 3, 2011 20:29:31)
Офлайн
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--'
>>>
Отредактировано (Окт. 4, 2011 00:37:54)
Офлайн
Скорее всего придется сделать как написал 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)
Офлайн