2014-09-17 3 views
1

많은 매개 변수를 가진 복잡한 함수가 있습니다. 필자는 클래스, 모듈, 함수 등을 사용하여 매개 변수를 정의하고 큰 함수에 전달할 절차를 생각합니다.파이썬에서 데코레이터를 사용하여 완전한 클래스를 래핑 할 수 있습니까?

이 코드는 실제로 작동합니다. 그러나 그렇게하는 것이 "합법적"인지는 모른다.

from functools import wraps 

def myfunc (value) : 
    print 'myfunc' , value 

def somewrapper (f): 
    @wraps(f) 
    def decorated_class() : 
     print "inside wrapper" 
     print hasattr(f,'foomember') 
     return myfunc ('wrapped') 
    return decorated_class 

@somewrapper 
class mymodelclass : 
    some = 'value' 
    def foomember() : 
     return 'inside class' 

mymodelclass() 

답변

2

예, 클래스 데코레이터는 지원되며 Python에서 완벽하게 사용합니다. 이 기능은 파이썬 2.6에서 소개되었으며 PEP 3129을 통해 소개되었습니다. 그래서, 다음 두 코드 조각은 동일합니다 :

class A: 
    pass 
A = foo(bar(A)) 


@foo 
@bar 
class A: 
    pass 

당신이 아무것도 반환하지 않는 함수 객체로 mymodelclass 교체 한 이후 정말 나에게 많은 이해가되지 않습니다 제공하는 코드 샘플 당신이 그것을 실행할 때, 그러나 그것은 마치 당신이 그 아이디어를 보여주기 위해 사용하는 장난감의 예일뿐입니다.

관련 문제