- 타입 힌트(Type hint) : 변수 또는 함수의 인자에 타입을 지정하는 방식, 선택적 사용이며 코드에는 영향주지 않지만
가독성, 유지보수성을 높일 수 있다.
- 데코레이터(Decorator) : 다른 함수나 클래스를 수정 또는 꾸며주는 함수
- 함수/클래스 정의 바로 위 '@' 기호를 사용
- 데코레이터의 여러 예시
(1)
my_decorator 함수는 다른 함수를 인자로 받아 새로운 함수 'wrapper'를 반환
@my_decorator는 my_function 함수를 my_decorator함수의 인자로 전달한다. 이후 my_function은 wrapper함수로 대체!
따라서, my_function을 호출해보면 wrapper의 func()위 아래에 있는 출력문장 사이에 "Hello, world!"가 위치하는 것을 알 수 있다.
(2)
(3)
add함수는 @log_decorator로 꾸며져 있는 상태. 따라서 add함수를 호출하면
log_decorator함수가 add함수를 '수정'한 뒤 반환한 wrapper함수가 실행됨
(4) 시간 측정 데코레이터
(5) 곱셈 활용 데코레이터
- 정적메소드
- 클래스 메소드를 정의할 때 사용되는 데코레이터
- 클래스나 클래스 인스턴스의 속성에 접근할 필요 없이, 인자로 받은 값들만 처리되는 메소드
- 파이썬에서 클래스에서 직접 접근 가능한 2가지 메소드가 staticmethod와 classmethod임
(하지만 파이썬에서는 정적메소드여도 인스턴스에서 접근 가능함 주의)
- 인스턴스 생성 없이 클래스 특정 동작을 수행하는 경우에 사용
1. @staticmethod
- 정적 메소드 정의 시 사용
- 정적 메소드는 클래스나 인스턴스의 속성을 사용하지 않고, 인자로 전달받은 값만으로 처리되는 메소드
=> 클래스나 클래스 인스턴스의 속성에 접근할 필요가 없는 것은 self, cls를 통해 클래스/인스턴스의 속성을 사용하지 않아도 된다는 것을 의미
- 위 코드에서, my_method는 'self'를 통해서 self.my_instance_variable 이라는 인스턴스 변수에 접근
- 반면, my_static_method는 클래스나 인스턴스의 속성을 사용하지 않고 인자로 전달받은 x,y만으로 계산 => 정적 메소드
- 위 코드에서 my_static_method는 정적 메소드로 정의 되어 있음
- 첫 번째 인자로 MyClass를 받아서 MyClass.x와 y를 더한 값을 반환
2. @classmethod
- 클래스 메소드를 정의할 때 사용
- 클래스 레벨에서 동작, 클래스 레벨에서 사용되는 속성을 조작할 때 사용
- 첫 번째 인자로 클래스 자체를 전달 받ㅇ므
- 위 코드에서, get_count메소드는 클래스 메소드로 정의
- 첫 번째 인자로 'cls'받음 -> 해당 클래스 자체를 나타냄 (cls.count = Person.count)
- Person.get_count()와 같이 클래스 자체에서 바로 호출 -> Person클래스에서 생성된 인스턴스 개수 구할 수 있음
- 출력결과 : 2 (인스턴스는 person1, person2만 생성됨을 알 수 있음)
아직 처음 접한 개념이라 조금 어려워서 나중에 더 추가할 예정.. !
출처 및 참고 : 스파르타코딩-파이썬 심화
'Python' 카테고리의 다른 글
Python <코드 컨벤션, 정규 표현식, 여러가지 모듈> (0) | 2023.04.04 |
---|---|
파이썬 <kwargs, args / 패킹, 언패킹에 관하여> (0) | 2023.04.01 |
파이썬 기초문법 8 <예외처리, finally, 모듈, 패키지> (0) | 2023.03.23 |
파이썬 기초문법7 <메소드 오버로딩, pass, super> (0) | 2023.03.23 |
파이썬 기초문법 6 <class, __init__, 멤버변수, 메소드,상속> (4) | 2023.03.22 |