У меня есть специальный __getattribute__, который должен изменять возвращаемое значение, если элемент не является методом (то есть атрибутом). Предположим, что все атрибуты (self.a, self.b и т. д.) имеют тип str.
class A:
def __init__(self):
self.a = 1
def __getattribute__(self, k):
attr = object.__getattribute__(self, k)
if type(attr) != types.MethodType:
return '{}!'.format(attr)
return attr
< /code>
Я получаю ошибку в ipython при получении представления экземпляров класса A < /code>, но я не понимаю, почему.
Например: < /p>
In [26]: a = A()
In [27]: a
Out[27]: ---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~/miniconda3/lib/python3.7/site-packages/IPython/core/formatters.py in __call__(self, obj)
700 type_pprinters=self.type_printers,
701 deferred_pprinters=self.deferred_printers)
--> 702 printer.pretty(obj)
703 printer.flush()
704 return stream.getvalue()
~/miniconda3/lib/python3.7/site-packages/IPython/lib/pretty.py in pretty(self, obj)
380 # 1) a registered printer
381 # 2) a _repr_pretty_ method
--> 382 for cls in _get_mro(obj_class):
383 if cls in self.type_pprinters:
384 # printer registered in self.type_pprinters
~/miniconda3/lib/python3.7/site-packages/IPython/lib/pretty.py in _get_mro(obj_class)
318 # Old-style class. Mix in object to make a fake new-style class.
319 try:
--> 320 obj_class = type(obj_class.__name__, (obj_class, object), {})
321 except TypeError:
322 # Old-style extension type that does not descend from object.
AttributeError: 'str' object has no attribute '__name__'
< /code>
Но print (a) < /code> работает нормально < /p>
In [33]: print(a)
Примечание. В простом Python REPL он работает правильно.
>>> a = A()
>>> a
Подробнее здесь: https://stackoverflow.com/questions/544 ... tattribute
Ошибка переписки ipython при использовании пользовательского __getAttribute__ ⇐ Python
Программы на Python
1737682037
Anonymous
У меня есть специальный __getattribute__, который должен изменять возвращаемое значение, если элемент не является методом (то есть атрибутом). Предположим, что все атрибуты (self.a, self.b и т. д.) имеют тип str.
class A:
def __init__(self):
self.a = 1
def __getattribute__(self, k):
attr = object.__getattribute__(self, k)
if type(attr) != types.MethodType:
return '{}!'.format(attr)
return attr
< /code>
Я получаю ошибку в ipython при получении представления экземпляров класса A < /code>, но я не понимаю, почему.
Например: < /p>
In [26]: a = A()
In [27]: a
Out[27]: ---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~/miniconda3/lib/python3.7/site-packages/IPython/core/formatters.py in __call__(self, obj)
700 type_pprinters=self.type_printers,
701 deferred_pprinters=self.deferred_printers)
--> 702 printer.pretty(obj)
703 printer.flush()
704 return stream.getvalue()
~/miniconda3/lib/python3.7/site-packages/IPython/lib/pretty.py in pretty(self, obj)
380 # 1) a registered printer
381 # 2) a _repr_pretty_ method
--> 382 for cls in _get_mro(obj_class):
383 if cls in self.type_pprinters:
384 # printer registered in self.type_pprinters
~/miniconda3/lib/python3.7/site-packages/IPython/lib/pretty.py in _get_mro(obj_class)
318 # Old-style class. Mix in object to make a fake new-style class.
319 try:
--> 320 obj_class = type(obj_class.__name__, (obj_class, object), {})
321 except TypeError:
322 # Old-style extension type that does not descend from object.
AttributeError: 'str' object has no attribute '__name__'
< /code>
Но print (a) < /code> работает нормально < /p>
In [33]: print(a)
Примечание. В простом Python REPL он работает правильно.
>>> a = A()
>>> a
Подробнее здесь: [url]https://stackoverflow.com/questions/54494601/ipython-repl-error-when-using-a-custom-getattribute[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия