LINUX.ORG.RU

Поясните по __repr__

 ,


0

1

Короче, жесть какая то. Есть класс:

class Bed:
	def __init__(self, infs, code, name, bcnt):
		self.infs = infs
		self.code = code
		self.name = name
		self.bcnt = bcnt

	def __repr__(self):
		return self.name
Я загоняю несколько его экземляров в список. Потом, классы из этого списка добавляю в Tk-шный listbox. Все нормально, вывод правильный. А когда я беру объект из списка, вот так:
def profile_change(self, evt):
		w = evt.widget
		index = int(w.curselection()[0])
		value = w.get(index) # <<<<<<<<<<<<<
		self.k10_kpkcd.delete(0, END)
		self.k10_kpkcd.insert(0, value.code)
То получаю unicode-object. Почему блин?

Deleted

Ответ на: комментарий от Aswed

Сам я не помню listbox-а, но эти методы иногда путают, так что на всякий случай упоминаю.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Ты уверен, что он использует метод __repr__, а не __str__?

Простите, а разница? Разве вызов __str__ в конечном итоге не приводит к вызову __repr__? Но суть то не в этом, как мне получить мой объект - Bed, а не unicode?

Deleted
()
Ответ на: комментарий от Deleted
>>> class B:
...   def __repr__(self):
...     return "hello"
... 
>>> b = B()
>>> print b
hello
>>> b
hello
>>> b.__str__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: B instance has no attribute '__str__'
>>> b.__repr__()
'hello'
>>> 
i-rinat ★★★★★
()
Ответ на: комментарий от Deleted

Нет конечно, это «не муж и жена» а два разных метода.

AIv ★★★★★
()

Мозга на нормальный пример конечно не хватило?

То получаю unicode-object. Почему блин?

Тогда очевидный ответ: ты пихаешь в listbox строки.

bj
()

Почему блин?

Потому что не пирог, луль

niemand
()

Бля, это просто бля. По другому - не скажешь.

Ты вообще инглишь понимэ? repr - это что такое ты думаешь? А? representation. А что это такое? Правильно - представление. РАВНОПРАВНОЕ, ебать, ПРЕДСТАВЛЕНИЕ. А ты что пишешь? Ты говно пишешь. self.name тебе никак не поможет восстановить объект. Ну неужели мозгов даже на это не хватает?

anonymous
()
Beds = {self.name: self for self in (Bed(str(i)) for I in range(42))}
print Beds['1']
Virtuos86 ★★★★★
()
Ответ на: комментарий от Deleted

Нет

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
...     def __str__(self):
...             return 'A'
...     def __repr__(self):
...             return 'B'
... 
>>> A
<class __main__.A at 0x1068758d8>
>>> A()
B
>>> print A()
A

Aswed ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.