객체 → 파이썬의 데이터를 추상화한다. 데이터 자체가 객체임
모든 객체는 id로 관리된다.
Namedtuple
일반적인 튜플의 사용하는 예제
# 튜플은 리스트보다 속도가 빠름.
# 두 점 사이의 거리를 구하는 공식
pt1 = (1.0, 5.0)
pt2 = (2.5, 1.5)
from math import sqrt # 제곱근
line_leng1 = sqrt((pt2[0] - pt1[0]) ** 2 + (pt2[1] - pt1[1]) ** 2)
네임드 튜플을 선언해 사용하는 예제
from collections import namedtuple
# 네임드 튜플 선언
point = namedtuple('point', 'x y') # 가짜로 사용할 이름을 정하는것.
# 두 점을 선언
pt1 = point(1.0, 5.0)
pt2 = point(2.5, 1.5)
line_leng2 = sqrt((pt2.x - pt1.x) ** 2 + (pt2.y - pt1.y) ** 2)
네임드 튜플의 선언 방법
# 모두 같은 선언이다.
point1 = namedtuple('point', ['x', 'y'])
point2 = namedtuple('point', 'x, y')
point3 = namedtuple('point', 'x y')
point4 = namedtuple('point', 'x y x class', rename=True) # Default=False
# rename 옵션을 주면 keyword의 중복, 예약어(리저브워드)는 자동으로 변경해준다. _순번 등
# dict 를 unpacking 은 **를 붙인다. ex) **dict_name
temp_dict = {'x': 75, 'y': 55}
# 객체 생성
p1 = Point1(x=10, y=35)
p2 = Point2(20, 40)
p3 = Point3(45, y=20)
p4 = Point4(10, 20, 30, 40)
p5 = Point3(**temp_dict)
# 객체 사용
print(p1[0] + p2[1]) # Index Error 주의
print(p1.x + p2.y) # 클래스 변수 접근 방식
# Unpacking
x, y = p3
print(x+y)
# Rename 테스트
print(p4)
# 네임드 튜플 메소드
temp = [52, 38]
# _make() : 새로운 객체 생성
p4 = Point1._make(temp)
print(p4)
# _fields : 필드 네임 확인
print(p1._fields, p2._fields, p3._fields)
# _asdict() : OrderedDict 반환
print(p1._asdict(), p4._asdict())
# _replace() : 수정된 '새로운' 객체 반환
print(p2._replace(y=100))
네임드 튜플과 그룹 리스트를 사용한 예제
# 네임드 튜플 선언
Classes = namedtuple('Classes', ['rank', 'number'])
# 그룹 리스트 선언
numbers = [str(n) for n in range(1, 21)]
ranks = 'A B C D'.split()
# List Comprehension
students = [Classes(rank, number) for rank in ranks for number in numbers]
print(len(students))
print(students)