일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- classification
- nlp
- 알고리즘
- SSL
- PRML
- Depth estimation
- 자료구조
- 3d
- pytorch
- 머신러닝
- GAN
- REACT
- web
- 딥러닝
- algorithm
- computervision
- clean code
- dl
- FineGrained
- nerf
- ML
- Torch
- Python
- Meta Learning
- CV
- math
- FGVC
- Vision
- cs
- Front
- Today
- Total
KalelPark's LAB
[ CLEAN CODE ] Tuple, namedtuple, logging, class method의 차이 본문
[ CLEAN CODE ] Tuple, namedtuple, logging, class method의 차이
kalelpark 2023. 3. 18. 16:12
코드에서 값을 관리하는 부분이 점점 복잡해지고 있음을 깨닫는 즉시 해당 기능을 클래스로 분리하는 것이 좋습니다.
이를 통하여, 데이터를 더 잘 캡슐화해주는 정의된 인터페이스를 활용하는 것이 가능합니다.
우선 기초 지식부터 다듬어 보도록 하겠습니다.
인터페이스와 구체적인 구현 사이에 잘 정의된 추상화 계층을 만들 수 있습니다.
Tuple : Tuple 자료 구조는 불변한 순서가 있는 객체로 생성하여, 값을 변경할 수 없음
Tuple은 튜플에 있는 요소에 접근할 때, 순서로 기억하기 때문에, 순서로 접근해야 하는 단점이 있음.
그러므로, Namedtuple을 사용하면 더욱 편리해집니다.
Namedtuple : Class가 아니고, collections 내 존재합니다.
사용 예시
- 위치 또는 키워드 Argument로 사용이 가능합니다.
- 인덱스로 접근하는 것이 가능합니다.
- unpack으로 사용이 가능
- 필드 이름으로 접근이 가능
- __repr__ 사용이 가능
from collections import namedtuple
point = namedtuple("point", ["x", "y"])
p = point(11, y = 33)
print(p[0] + p[1])
point_2 = namedtuple("point", "x, y")
a = point_2(11, 33)
print(a[0] + a[1])
Point = namedtuple('Point', 'x y x cler', rename=True)
print(Point.x)
logging 코드 수월하게 작성하기
def log_missing():
print("키 추가됨")
return 0
from collections import defaultdict
current = {"초록" : 12, "파랑" : 3}
increments = [
("빨강", 5),
("파랑", 17),
("주황", 9),
]
result = defaultdict(log_missing, current)
// 만약 값이 존재하지 않으면, logging을 한다는 의미입니다.,
API 작성 및 코드 분할 시 알아보기 쉽습니다.
classmethod 와 staticmethod의 차이
classmethod
- 첫 번째 인자로 클래스를 입력합니다. (접근 시, 생략하고 접근해야 합니다..!)
staticmethod
- 특별히 추가되는 인자가 없습니다.
staticmethod는 parentclass의 method를 가져와 적용합니다. 반면에 classmethod는 cls인자를 활용하여, cls클래스의 속성 즉, 자기 자신으로 귀속됩니다.
여기서 보면, Language라는 자식class가 존재하고, KoreanLanguage는 부모class가 존재하는데, 부모 class를 상속받을 때,
@staticmethod는 부모의 요소를 사용하지만, @classmethod는 자기 자신의 것을 활용해서 출력하는 모습을 확인할 수 있습니다.
class Language:
default_language = "English"
def __init__(self):
self.show = "나의 언어" + self.default_language
@classmethod
def class_my_language(cls):
return cls()
@staticmethod
def static_my_language():
return Language()
def print_language(self):
print(self.show)
class KoreanLanguage(Language):
default_language = "한국어"
a = KoreanLanguage()
b = KoreanLanguage()
a.class_my_language().print_language()
b.static_my_language().print_language()
'Python > CLEAN CODE' 카테고리의 다른 글
[CLEAN CODE] __str__ 과 __repr__의 차이 (0) | 2023.03.28 |
---|---|
[CLEAN CODE] Attribute 관리하기, Getter, Setter (0) | 2023.03.20 |
[ CLEAN CODE ] itertools 내장 라이브러리 알아보기 (0) | 2023.03.17 |
[ CLEAN CODE ] Comparison, Generator? (0) | 2023.03.15 |
[ CLEAN CODE ] Dictionary defaultdict, Closure in local function? (1) | 2023.03.14 |