python3 Определение __repr__ для имени функции - PullRequest
0 голосов
/ 07 января 2019

Извинения: этот вопрос очень неясен. Я переписал это в форме, которая намного яснее, я надеюсь. См. https://stackoverflow.com/questions/54066737. Я действительно хотел удалить этот вопрос, но система посоветовала мне не делать этого.

Я борюсь с определением __repr__() в моем классе. У меня есть член класса self.lbl, который может быть пустой строкой '' или строкой из одного символа 'a' или именем функции. Мой ошибочный код

def __repr__(self):
    lbl = self.lbl
    if isinstance(lbl,str) and len(lbl) <= 1:
        out = "'" + lbl + "'" 
    elif type(lbl).__name__ == 'function':
        out = repr(lbl.__name__)
    return out

Предположим, что f является определенной функцией, и я пишу x=f. Затем я хочу извлечь информацию f из MyClass(x), а print(MyClass(x)) должен просто дать мне f, а не 'f'

Ответы [ 2 ]

0 голосов
/ 07 января 2019

может быть, вы имеете в виду что-то вроде:

class MyClass:
    def __init__(self, lbl):
        self.lbl = lbl

    def __repr__(self):
        lbl = self.lbl
        if callable(lbl):
            lbl = lbl.__name__
        else:
            lbl = repr(lbl)
        return f"MyClass({lbl})"

если проверено с:

def foo():
    return bar

print(MyClass('a'))
print(MyClass(lambda x: x * 2))
print(MyClass(foo))

дает:

MyClass('a')
MyClass(<lambda>)
MyClass(foo)
0 голосов
/ 07 января 2019

Типы типа str и lambda уже имеют свои __repr__. Просто используйте это. Обратите внимание, что eval(repr(obj)) создание исходного объекта является рекомендацией, а не требованием.

Пример (Python 3.6 +):

>>> class MyClass:
...     def __init__(self,lbl):
...         self.lbl = lbl
...     def __repr__(self):
...         return f'MyClass(lbl={self.lbl!r})'
...
>>> MyClass('')
MyClass(lbl='')
>>> MyClass('a')
MyClass(lbl='a')
>>> MyClass(lambda x: x * 2)
MyClass(lbl=<function <lambda> at 0x000001E0E288E730>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...