[Python] 파이썬 데이터 모델#1

아직·2022년 6월 8일
0
post-thumbnail

1)
Input

print(int)

Output

<class 'int'>

무심코 사용한 것들의 명령어들의 데이터 타입은 모두 '클래스'였다. dir(int)로 확인하면 __class__가 들어있음을 알 수 있다.

2)

n=10
print(n+100) #외부적 실행
print(n.__add__(100)) #내부적 실행

역시 n에 10을 할당하고 클래스에서 __add__ attribute를 꺼내 온 것임을 알 수 있다.
print(n.__doc__)를 활용해 class의 설명을 확인해보자.

3)

def __add__(self, x):
        print('이제 더하기가 호출될거야')
        return self._price + x._price

...

print(s1 + s2)
print(s1.__add__(s2))

+는 __add__ method를 자연스럽게 호출한다. 따라서 클래스라면 반드시 상속하는 Object 클래스 내부에서 기호 +와 __add__가 동치가 되게하는 모종의 작업이 있었음을 예상할 수 있다.

매직 메소드는 최상위 클래스에 규정되어 있는 add와 같은 형태의 attribute를 불러와 커스터마이징해서 눈속임(사실 s1+s2의 산수는 불가능)하는 개념이라고 이해해보자.

엄밀히 말해서 attribute는 클래스 아래 정의된 메소드와 변수를 모두 포함하는 개념이라고 한다.

4)

pt1 = (1, 5)
pt2 = (2.5, 1.5)
l_leng1 = sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) ** 2)
#네임드 튜플 활용
Point = namedtuple('Point', 'x y')
pt3 = Point(1.0, 5.0)
pt4 = Point(2.5, 1.5)
l_leng2 = sqrt((pt3.x - pt4.y) ** 2 + (pt1.x - pt2.y) ** 2)

네임드 튜플을 사용하면 pt1[0]와 같이 인덱스로 접근하지 않고 키로 접근할 수 있다. 이 방법이 더 안전하고 직관적이다.

5)

#list comprehension
students = [Classes(rank, number) for rank in ranks for number in numbers]

#더 잘 짜인 코드
students2 = [Classes(rank, number)
            for rank in 'A B C D'.split()
            for number in [str(n) for n in range(1, 21)]
            ]

네임드 튜플을 활용한 list comprehension 예시

0개의 댓글