Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2013 13:04:20

yiooxir
Зарегистрирован: 2012-10-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

не совсем силен в терминах. попробую объяснить что требуется.

есть класс, к примеру:

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__() возвращает только строковые значения. Какой метод у объекта отвечает за ответ при вызове этого объекта без скобок ?

Отредактировано yiooxir (Июль 16, 2013 13:08:38)

Офлайн

#2 Июль 16, 2013 13:11:22

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

Вообще ничего не понял. Извините :)
1. cl - это не атрибут, а ссылка на экземпляр класса.
2. При вызове какого метода (каких методов) должны возвращаться списки?



Офлайн

#3 Июль 16, 2013 13:20:17

yiooxir
Зарегистрирован: 2012-10-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

я правильно понимаю: экземпляр класса - это объект. т.е. cl в моем случае это есть объект - экземпляр класса MyClass.
при вызове экземпляра класса (или наверное правильней при обращении к объекту cl) и должны вываливаться списки.

PS да, раз уж завел эту тему, помогите с терминологией, как называются вызовы cl и cl()

Отредактировано yiooxir (Июль 16, 2013 13:22:22)

Офлайн

#4 Июль 16, 2013 13:24:48

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

При каком обращении?
Например, обращение к атрибуту экземпляра:

cl.i
Или обращение к элементу экземпляра
cl[1]
Или обращение к экземпляру, как к функции
cl("a")
Или… Еще много вариантов.
Так, что Вам нужно?




Офлайн

#5 Июль 16, 2013 13:37:31

yiooxir
Зарегистрирован: 2012-10-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

да не к атрибуту и не к методу, а к самому экземпляру ( не как к функции)
выполните код:

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,]

Отредактировано yiooxir (Июль 16, 2013 13:45:37)

Офлайн

#6 Июль 16, 2013 13:50:25

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

Это не обращение к экземпляру :)
Специальный метод __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)

Офлайн

#7 Июль 16, 2013 18:50:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

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__ в классе.



Отредактировано doza_and (Июль 16, 2013 19:47:42)

Офлайн

#8 Июль 16, 2013 20:38:08

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

s.__str__()
Хм :)



Офлайн

#9 Июль 22, 2013 09:20:57

Garuda
Зарегистрирован: 2013-07-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с вызовом объекта

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]

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version