Форум сайта python.su
0
не совсем силен в терминах. попробую объяснить что требуется.
есть класс, к примеру:
class MyClass:
def __init(self, i):
self.i=i
def __str__(self):
return str(i)
>> cl = MyClass(1)
>> print cl
1
>>print cl
[1,]
Отредактировано yiooxir (Июль 16, 2013 13:08:38)
Офлайн
63
Вообще ничего не понял. Извините :)
1. cl - это не атрибут, а ссылка на экземпляр класса.
2. При вызове какого метода (каких методов) должны возвращаться списки?
Офлайн
0
я правильно понимаю: экземпляр класса - это объект. т.е. cl в моем случае это есть объект - экземпляр класса MyClass.
при вызове экземпляра класса (или наверное правильней при обращении к объекту cl) и должны вываливаться списки.
PS да, раз уж завел эту тему, помогите с терминологией, как называются вызовы cl и cl()
Отредактировано yiooxir (Июль 16, 2013 13:22:22)
Офлайн
63
При каком обращении?
Например, обращение к атрибуту экземпляра:
cl.i
cl[1]
cl("a")
Офлайн
0
да не к атрибуту и не к методу, а к самому экземпляру ( не как к функции)
выполните код:
class MyClass:
def __init__(self, i):
self.i=i
def __str__(self):
return str(i)
>> cl = MyClass(1)
>> print cl
1
>> print cl
[1,]
Отредактировано yiooxir (Июль 16, 2013 13:45:37)
Офлайн
63
Это не обращение к экземпляру :)
Специальный метод __str__ может возвращать только строку.
Можно просто, вот так:
class now: def __init__(self, i): self.i = [] if hasattr(i, "__iter__"): self.i.extend(i) else: self.i.append(i) def __str__(self): return str(self.i) e = now(10) print e
Отредактировано 4kpt (Июль 16, 2013 13:52:11)
Офлайн
253
yiooxirЭто не совсем так
что def __str__() возвращает только строковые значения
class Ts(object): def __init__(self): self.i=[1,2,3] def __str__(self): return self.i >>> s=Ts() >>> str(s) Traceback (most recent call last): File "<interactive input>", line 1, in <module> TypeError: __str__ returned non-string (type list) >>> s.__str__() [1, 2, 3]
yiooxircl - Это объект а не вызов
как называются вызовы cl и cl()
Отредактировано doza_and (Июль 16, 2013 19:47:42)
Офлайн
63
s.__str__()
Офлайн
0
Python 3
>>> class d(list): def __init__(self, v = 0): list.__init__(self) self.append(v) >>> s=d(1) >>> s [1] >>> x = s + [1,2,3,4] >>> x [1, 1, 2, 3, 4]
Офлайн