[PYTHON] 클래스의 메소드에 파이썬 장식자를 적용하기
PYTHON클래스의 메소드에 파이썬 장식자를 적용하기
데코레이터 @login_testuser가 test_1 메소드에 대해 적용되었습니다.
class TestCase(object):
@login_testuser
def test_1(self):
print "test_1()"
"test_"접두어가 붙은 클래스의 모든 메소드에 @login_testuser를 적용 할 수있는 방법이 있습니까?
즉, 아래의 test_1, test_2 메소드에는 데코레이터가 적용되지만 setUp에는 적용되지 않습니다.
class TestCase(object):
def setUp(self):
pass
def test_1(self):
print "test_1()"
def test_2(self):
print "test_2()"
해결법
-
==============================
1.파이썬 2.6에서, 클래스 데코레이터는 분명히 갈 길입니다. 예를 들어, 다음은 이러한 종류의 작업에 대한 일반적인 일반적인 예입니다.
파이썬 2.6에서, 클래스 데코레이터는 분명히 갈 길입니다. 예를 들어, 다음은 이러한 종류의 작업에 대한 일반적인 일반적인 예입니다.
import inspect def decallmethods(decorator, prefix='test_'): def dectheclass(cls): for name, m in inspect.getmembers(cls, inspect.ismethod): if name.startswith(prefix): setattr(cls, name, decorator(m)) return cls return dectheclass
그리고 지금, 그냥
@decallmethods(login_testuser) class TestCase(object): def setUp(self): pass def test_1(self): print "test_1()" def test_2(self): print "test_2()"
당신이 원하는 것을 얻을 것입니다. 파이썬 2.5 또는 그 이하의 경우 @decallmethods 구문은 클래스 장식용으로 작동하지 않지만, 완전히 똑같은 코드를 사용하면 TestCase 클래스 종료 직후에 다음 문으로 바꿀 수 있습니다.
TestCase = decallmethods(login_testuser)(TestCase)
-
==============================
2.확실한. 클래스의 모든 속성을 반복합니다. 각각의 메소드를 확인하고 이름이 "test_"로 시작하는지 확인하십시오. 그런 다음 데코레이터에서 반환 된 함수로 바꿉니다.
확실한. 클래스의 모든 속성을 반복합니다. 각각의 메소드를 확인하고 이름이 "test_"로 시작하는지 확인하십시오. 그런 다음 데코레이터에서 반환 된 함수로 바꿉니다.
같은 것 :
from inspect import ismethod, getmembers for name, obj in getmembers(TestCase, ismethod): if name.startswith("test_"): setattr(TestCase, name, login_testuser(obj))
-
==============================
3.대신에 login_testuser의 코드를 setUp에 넣는 것이 더 나아지지 않을 것이라고 확신합니까? 그것이 setUp의 목적입니다. 모든 테스트 방법 이전에 실행됩니다.
대신에 login_testuser의 코드를 setUp에 넣는 것이 더 나아지지 않을 것이라고 확신합니까? 그것이 setUp의 목적입니다. 모든 테스트 방법 이전에 실행됩니다.
-
==============================
4.예, 클래스의 dir / __ dict__를 반복하거나 metaclass를 사용하여 속성이 "test"로 시작하는지 식별 할 수 있습니다. 그러나 이렇게하면 데코레이터를 명시 적으로 작성하는 것보다 덜 명확하고 명확한 코드가 작성됩니다.
예, 클래스의 dir / __ dict__를 반복하거나 metaclass를 사용하여 속성이 "test"로 시작하는지 식별 할 수 있습니다. 그러나 이렇게하면 데코레이터를 명시 적으로 작성하는 것보다 덜 명확하고 명확한 코드가 작성됩니다.
from https://stackoverflow.com/questions/2237624/applying-python-decorators-to-methods-in-a-class by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 복수 파일 필드가있는 장고 양식 (0) | 2018.11.03 |
---|---|
[PYTHON] 파이썬에서의 프로세스 당 CPU 사용량 (0) | 2018.11.02 |
[PYTHON] Python으로 Selenium에서 프로그래밍 방식으로 파이어 폭스 헤드리스를 만드는 방법은 무엇입니까? (0) | 2018.11.02 |
[PYTHON] 세트의 모든 부분 집합을 얻는 방법? (powerset) (0) | 2018.11.02 |
[PYTHON] Python과 OpenCV를 사용하여 붉은 색 찾기 (0) | 2018.11.02 |