отвечает:
отвечает на вопрос 2: нет, не использует def
отвечает на вопрос 1: да, вы можете видеть функцию как класс, потому что python основан на классах
вариант 1 (с использованием классов):
, потому что это:
class foo():
def __init__(self):
self = "foo"
и это:
class _foo():
def __init__(self):
self.foo = "foo"
def __call__(self):
return self.foo
foo = _foo()
для пользователя такие же, как:
def foo():
return "foo"
, так что если вы действительно хотите иметь что-то похожее на функцию, но с пользовательской версией __repr__
вам просто нужно сделать что-то вроде этого :
class _foo():
def __init__(self):
self.foo = "foo"
def __repr__(self):
return "func(foo)"
def __call__(self):
return self.foo
foo = _foo()
, потому что теперь, если вы выполните foo
в IDLE после вставки этого в него, вы увидите вывод:
>>> foo
func(foo)
>>>
с использованием класса-оболочки:
в этом примере я использую класс в качестве оболочки:
class func_wrapper():
def __init__(self,func,repr_msg):
self.func = func
self.repr_msg = repr_msg
self = repr_msg
def __call__(self,*args,**kwargs):
return self.func(*args,**kwargs)
def __repr__(self):
return self.repr_msg
def repr(msg):
def dec(fn):
wrapper = func_wrapper(func = fn,repr_msg = msg)
return wrapper
return dec
@repr("LOL")
def foo():
return "foo function"
print(foo)
print(foo.__repr__())
print(foo())
и это печатает:
LOL
LOL
foo function
, объясняя:
(почти ) все в python - это класс, попытайтесь использовать тип (объект), который вы увидите почти с каждым «объектом», который говорит, что это класс.
, поэтому я пытаюсь сказать, что python почти барельеф Вокруг классов они повсюду, потому что если вы пытаетесь найти не класс из чего-то, что не является встроенным. Потому что только некоторые встроенные функции не рассматриваются как классы
recap:
, так что Напомним мой ответ:
Нет, вы не можете использовать def, чтобы вызывать __repr__
до вызова функции, но вы можете создать класс, который действительно выглядит как функция, и там вы можете создать класс, который для пользователя это как функция