[주절주절]
나는 아직 익숙하지 않은 코딩 스타일인데 종종 이런 것들을 이용해서 코딩하시는 분들이 있다. 1년에 1~2번 만날까말까이다보니 매번 헤매어서 정리해둔다!
[Today I Learned]
# getattr
>>> getattr(object, name[,default])
__builtin__ 모듈에 포함된 함수로, object에 존재하는 속성의 값을 가져온다. 세번째 인자로 default 값을 넘겨줄 경우 존재하지 않는 속성을 가져오려는 경우도 커버할 수 있다.
class Number: def __init__(self): self.x = 10 self.y = 20 n = Number() print(getattr(n, 'x')) # 10 print(getattr(n, 'z')) # Attribute error : 'Number' Object has no attribute 'z' print(getattr(n, 'z', 'NO!')) # NO!
구현해놓은 여러 클래스 중, 넘겨받은 인자 이름에 해당하는 클래스(ex. 모델)를 반환하고 싶을 때 if문을 사용하게 되는데, getattr을 이용하면 긴 if문을 한 줄로 줄일 수 있다.
# 모듈 & 패키지
모듈 : 모듈이란 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일(원칙적으로 .py 확장자)
+ if __name__ == "__main__"
: 위와 같은 문법으로 묶어두지 않은 코드는 import할때 모두 실행되게 된다. 따라서 단순히 import할 때는 실행되지 않았으면 하는 코드들은 위의 문법으로 묶어두어야 한다.
패키지 : 특정한 주제를 가진 모듈을 모아 구성한 것.
# import_module
Python 모듈을 import 할 때는 파일 초기에 선언해 사용하는 것이 일반적이지만, 사용자의 input에 따라 다르게 선언하고 싶을 때 (ex. args에 따라)는 동적으로 모듈을 import하기도 한다.
importlib이라는 패키지에서 불러와 다음과 같이 이용할 수 있다.
import importlib dataset_module = getattr(import_module("dataset"), args.dataset)
getattr 함수까지 한 번에 해석하자면, dataset.py 모듈을 import하고, 해당 모듈의 args.dataset class를 불러오라는 뜻이 된다.
[질문 노트]
Q. 개인적으로는 가독성은 조금 떨어진다는 생각도. 좋은 코드란 무엇일까?
'컴린이 일기장 > Today I Learned' 카테고리의 다른 글
[TIL] 파이썬 문자열 조작 / Deque (0) | 2021.07.14 |
---|---|
[TIL] 부동소수점 / 빅오(시간복잡도) / Python 자료형 (0) | 2021.07.12 |
[TIL] Python Multiprocessing (1) | 2021.03.30 |
[TIL] 서버 및 기본 환경을 세팅하자! (0) | 2021.02.26 |
[TIL] Pix2Pix HD(High-resolution Image synthesis and semantic manipulation with Conditional GANs) 논문 요약 (0) | 2021.01.24 |