isinstance (a, type_a) # a가 type_a인지 확인해주세요
isinstance (인스턴스, 클래스) # 인스턴스가 해당 클래스에 있는지 확인해주세요
자료의 type 말고도 해당 클래스의 인스턴스인지 확인 가능함.
ex) type_check는 함수의 매개변수가 지정된 자료형(클래스)이면 함수를 정상적으로 호출하고, 지정된 자료형과 다르면 RuntimeError 예외를 발생시키면서 '자료형이 다릅니다.' 에러 메시지를 출력해야 합니다.
def type_check(type_a, type_b): # type_check 함수 만들어서 각각 type_a, type_b인지 확인할거임!
def real_decorator(func): # 이제부터 진짜 데코레이터 만들거임
def wrapper(a, b): # 매개변수 2개 지정해달라 할거임
if isinstance(a, type_a) and isinstance(b, type_b): #만약 a가 type_a고, b가 type_b면
return func(a, b) # 작동하게 해주세요
else:
raise RuntimeError('자료형이 올바르지 않습니다.') # 아니라면, 에러뜨게 해주세요
return wrapper
return real_decorator
@type_check(int, int) # a, b 둘다 int면
def add(a, b):
return a + b # a + b 리턴하기
print(add(10, 20))
print(add('hello', 'world'))
-> 실행 결과
30
Traceback (most recent call last):
File "C:\project\practice_decorator.py", line 16, in <module>
print(add('hello', 'world'))
File "C:\project\practice_decorator.py", line 7, in wrapper
raise RuntimeError('자료형이 올바르지 않습니다.')
RuntimeError: 자료형이 올바르지 않습니다.