Найти - Пользователи
Полная версия: проблема с вызовом объекта
Начало » Python для новичков » проблема с вызовом объекта
1
yiooxir
не совсем силен в терминах. попробую объяснить что требуется.

есть класс, к примеру:
class MyClass:
def __init(self, i):
self.i=i
def __str__(self):
return str(i)

>> cl = MyClass(1)
>> print cl
1

так вот в чем вопрос, я хочу, чтобы при обращении к классу как к атрибуту (как в примере cl) мне в зависимости от переданного числа возвращались списки, т.е.
>>print cl
[1,]
Главное! вопрос не втом, как делать списки из полученных значений, а в том, что def __str__() возвращает только строковые значения. Какой метод у объекта отвечает за ответ при вызове этого объекта без скобок ?
4kpt
Вообще ничего не понял. Извините :)
1. cl - это не атрибут, а ссылка на экземпляр класса.
2. При вызове какого метода (каких методов) должны возвращаться списки?
yiooxir
я правильно понимаю: экземпляр класса - это объект. т.е. cl в моем случае это есть объект - экземпляр класса MyClass.
при вызове экземпляра класса (или наверное правильней при обращении к объекту cl) и должны вываливаться списки.

PS да, раз уж завел эту тему, помогите с терминологией, как называются вызовы cl и cl()
4kpt
При каком обращении?
Например, обращение к атрибуту экземпляра:
cl.i
Или обращение к элементу экземпляра
cl[1]
Или обращение к экземпляру, как к функции
cl("a")
Или… Еще много вариантов.
Так, что Вам нужно?


yiooxir
да не к атрибуту и не к методу, а к самому экземпляру ( не как к функции)
выполните код:
class MyClass:
def __init__(self, i):
self.i=i
def __str__(self):
return str(i)

>> cl = MyClass(1)
>> print cl
1
возвращается 1, а я хочу, чтобы при таком же обращении возвращался список
>> print cl
[1,]
4kpt
Это не обращение к экземпляру :)
Специальный метод __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
doza_and
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]
Возвращает он что угодно, только толку от этого мало.

yiooxir
как называются вызовы cl и cl()
cl - Это объект а не вызов
cl() вообще даст синтаксическую ошибку. Для того чтобы его определить нужно определить функцию __call__ в классе.
4kpt
s.__str__()
Хм :)
Garuda
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]
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