LINUX.ORG.RU

Получить значение self из __init__.

 


0

1
from UserDict import UserDict


class classname(UserDict):
    def __init__(self):
        print '%s' % self

instance = classname()

Что такого может быть унаследовано от UserDict и почему 'print %s' % self вызывает ошибку?
Разве 'print %s' % self не должно вывести адрес _main__.classname ?



Последнее исправление: unclear (всего исправлений: 1)

Разве self в данном случае не является адресом __main__.classname?

Нет.

print type(self)
print dir(self)
<type 'instance'>
['__cmp__', '__contains__', '__delitem__', '__doc__', '__getitem__', '__hash__', '__init__', '__len__', '__module__', '__repr__', '__setitem__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
anonymous
()
Ответ на: комментарий от anonymous

Вопрос неверно сформулировал: разве print '%s' % self не должен вывести адрес _main__.classname и если нет то почему?

В данном случае выводит например:

class classname():
    def __init__(self):
        print '%s' % self

instance = classname()

unclear
() автор топика

Оно должно вывести результат метода __repr__ определенного на UserDict или выше по иерархии классов (на самом деле __str__, но скорее всего __str__ там работает по-умолчанию). Там может быть что угодно.

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

Оно должно вывести результат метода __repr__ определенного на UserDict или выше по иерархии классов (на самом деле __str__, но скорее всего __str__ там работает по-умолчанию). Там может быть что угодно.

примерно так да, а чтобы UserDict'овый __repr__ нормально отработал, нужно и __init__ его вызвать. правильный вариант будет примерно такой:

from UserDict import UserDict


class classname(UserDict, object):
    def __init__(self):
        super(classname, self).__init__()
        print '%s' % self

instance = classname()
Novel ★★★★
()
Последнее исправление: Novel (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.