2022-08-06 06:20:04 +03:00
|
|
|
# Emulate the old behavior of method.__repr__ when printing,
|
|
|
|
# which called repr() on the receiver...
|
|
|
|
def __str__(self):
|
|
|
|
return f'<bound method {self.__qualname__} of {self.__self__!r}>'
|
|
|
|
method.__str__ = __str__
|
|
|
|
|
2022-06-02 08:30:09 +03:00
|
|
|
class Callable():
|
|
|
|
def __init__(self,name):
|
|
|
|
self.name = name
|
|
|
|
def __str__(self):
|
|
|
|
return f'<Callable {self.name}>'
|
|
|
|
def __repr__(self):
|
|
|
|
return str(self)
|
|
|
|
def __call__(self, *args):
|
|
|
|
print('callable',self,'received',args)
|
|
|
|
|
|
|
|
class Foo():
|
|
|
|
c = Callable
|
|
|
|
def __str__(self):
|
|
|
|
return f'<Foo instance>'
|
|
|
|
def __repr__(self):
|
|
|
|
return str(self)
|
|
|
|
|
|
|
|
if True:
|
|
|
|
let c = Callable('c')
|
|
|
|
let f = Foo()
|
|
|
|
let m = method(c,f)
|
|
|
|
m()
|
|
|
|
print(c,f,m)
|
|
|
|
|
|
|
|
let n = method(Foo.c('Foo.c()'),f)
|
|
|
|
n()
|
|
|
|
print(c,f,m,n)
|
|
|
|
|
|
|
|
m = method(method(method(print,'a'),'b'),'c')
|
|
|
|
m()
|
|
|
|
print(c,f,m)
|