내 장식에 Functools.update_wrapper()
을 사용하여 작동하지 않습니다, 그러나 그것은 단지 기능 (예 : __doc__
, __name__
등) 속성 update_wrapper
재 작성처럼 보이지만, help()
기능에 영향을주지 않습니다.Functools.update_wrapper는()가 제대로
저는 these answers을 알고 있지만 데코레이터 클래스에서는 작동하지 않습니다.
여기 내 기능입니다. 여기
import functools
class memoized(object):
def __init__(self, func):
self.func = func
functools.update_wrapper(self, func)
def __call__(self, *args):
self.func(*args)
@memoized
def printer(arg):
"This is my function"
print arg
그것은 버그처럼 보이는 출력
>>> printer.__doc__
This is my function
>>> help(printer)
Help on memoized in module __main__ object:
printer = class memoized(__builtin__.object)
| Methods defined here:
|
| __call__(self, *args)
|
| __init__(self, func)
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
,하지만 난 그것을 어떻게 해결할 수 있습니까?
그래서 클래스를 데코레이터로 사용하는 한 그것을 고칠 방법이 없습니다. – user3664218
@ user3664218 : 참으로; 'help()'는 인스턴스가 아닌 클래스에 대한 정보를 제공하며, 후자를 원한다면 클래스 데코레이터를 사용하면 안됩니다. –
이것은 클래스 데코레이터가 부분적으로 손상되었음을 의미합니다. 이 디자인의 타당성은 무엇입니까? –