Как установить метод визуализации строки для класса в Python - PullRequest
1 голос
/ 21 марта 2012

Если я сделаю:

    print "The item is:" + str(1) + "."

Я получу:

    The item is 1.

Но если я использую объект моего класса, dbref (здесь x - один из них), и пытаюсь его привести в соответствие:

    print "The item is:" + str(x) + "."

Я получу:

    The item is <mufdatatypes.dbref instance at 0xb74a2bec>.

Я бы предпочел, чтобы он возвратил строку моего собственного дизайна. Есть ли функция, которую я могу определить в своем классе, которая позволит мне сделать это?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Возвращает строку из метода __str__() .Вот так:

class SomeClass(object):

  def __init__(self, value):
    self.value = value

  def __str__(self):
    return '<SomeClass %s>' % self.value
1 голос
/ 21 марта 2012

Определить метод __str__.

>>> class Spam(object):
...   def __str__(self):
...     """my custom string representation"""
...     return 'spam, spam, spam and eggs'
... 
>>> x = Spam()
>>> x
<__main__.Spam object at 0x1519bd0>
>>> print x
spam, spam, spam and eggs
>>> print "The item is:" + str(x) + "."
The item is:spam, spam, spam and eggs.
>>> print "The item is: {}".format(x)
The item is: spam, spam, spam and eggs

edit: Демонстрация того, почему вы, вероятно, не хотите использовать __repr__, например, для переопределения представленияВаш товар в списке или другом контейнере:

>>> class mystr(str):
...   def __repr__(self):
...     return str(self)
... 
>>> x = ['this list ', 'contains', '3 elements']
>>> print x
['this list ', 'contains', '3 elements']
>>> x = [mystr('this list, also'), mystr('contains'), mystr('3 elements')]
>>> print x
[this list, also, contains, 3 elements]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...