Найти - Пользователи
Полная версия: аналог __str__() для класса
Начало » Python для экспертов » аналог __str__() для класса
1
Yurietc
Здравствуйте.
Подскажите, какой метод вызывается при строковом отображении/печати класса (не обьекта)?
>>> class A():
pass

>>> print A
__main__.A
Enchantner
Yurietc
а чем тебе класс не объект? :) такой же объект, у него есть __str__() и __repr__().
bw
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
Yurietc
Скорее всего придется сделать как написал bw. Нехотелось потому, что у меня несколько классов и для каждого придется создавать метакласс.
Пробовал использовать декоратор classmethod. Все как предполагалось, методу __str__() теперь не нужно передавать обьект класса, но вот беда, инструкция str(А) не вызывает метод А.__str__(), отсюда, собственно, и вопрос топика.
>>> class A():
@classmethod
def __str__(cls):
return "class A"


>>> A.__str__()
'class A'
>>> print A
__main__.A
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