도비LOG(跳飛錄)

도비의 AI 엔지니어 도전기

전문가를위한파이썬 7

[전문가를 위한 파이썬] 13장 연산자 오버로딩: 제대로 하기

13.1. 연산자 오버로딩 기본 지식- 파이썬은 다음과 같은 제한을 두어 융통성, 사용성, 안전성을 적절히 유지한다.1. 내장 자료형에 대한 연산자는 오버로딩할 수 없다.2. 새로운 연산자를 생성할 수 없으며, 기존 연산자를 오버로딩만 할 수 있다.3. is, and, or, not 연산자는 오버로딩할 수 없다(그러나 &, |, ~ 비트 연산자는 가능하다).  13.2. 단항 연산자- (__neg__): 단항 산술 부정. x가 -2이면 -x는 2이다.+ (__pos__): 단항 산술 덧셈. 일반적으로 x와 +x는 동일하지만, 그렇지 않은 경우도 있다.~ (__invert__): 정수형의 비트 반전. ~x는 -(x+1)로 정의된다(~x == -(x+1)). x가 2면, ~x는 -3이다. - 단항 연산자는 ..

Python 2024.09.08

[전문가를 위한 파이썬] 12장 내장 자료형 상속과 다중 상속

12.1. 내장 자료형의 상속은 까다롭다- 파이썬 2.2 이후 버전부터 내장 자료형을 상속할 수 있게 되었다. 그러나 C언어로 작성된 내장 클래스의 코드는 사용자가 오버라이드한 코드를 호출하지 않으므로 주의가 필요하다. class DoppelDict(dict): def __setitem__(self, key, value): super().__setitem__(key, [value] * 2) dd = DoppelDict(one=1) # dict클래스의 __init__() 메서드는 __setitem__()이 오버라이드되었다는 사실을 무시하므로, 'one'의 값을 중복하지 않고 그대로 저장한다.print(dd)# {'one': 1}dd["two"] = 2 # [] 연산자는 오버라이드한 __setit..

Python 2024.08.31

[전문가를 위한 파이썬] 11장 인터페이스: 프로토콜에서 ABC까지

11.1. 파이썬 문화에서의 인터페이스와 프로토콜- 인터페이스: 시스템에서 어떤 역할을 할 수 있게 해주는 객체의 공개 메서드의 일부- 프로토콜: 어떤 역할을 완수하기 위한 메서드 집합으로서의 인터페이스  11.2. 파이썬은 시퀀스를 찾아낸다- 파이썬은 __gititem__() 메서드만 구현하더라도 __gititem__() 메서드를 호출해서 객체를 반복하고 in 연산자를 사용할 수 있게 해준다.  11.3. 런타임에 프로토콜을 구현하는 멍키 패칭import collectionsfrom random import shuffleCard = collections.namedtuple("Card", ["rank", "suit"])class FrenchDeck: ranks = [str(n) for n in rang..

Python 2024.08.31

[전문가를 위한 파이썬] 10장 시퀀스 해킹, 해시, 슬라이스

10.1. Vector: 사용자 정의 시퀀스형- 상속이 아니라 구성을 이용해서 벡터를 구현하고자 함.- 요소들을 실수형 배열에 저장하고, 벡터가 불변 균일 시퀀스처럼 작동하게 만들기 위한 메서드들을 구현할 것임. 10.2. Vector 버전 #1: Vector2d 호환첫 번째 버전from array import arrayimport reprlibimport mathclass Vector: typecode = 'd' def __init__(self, components): self._combpnents = array(self.typecode, components) # '보호된' 객체 속성인 self._components는 벡터 요소를 배열로 저장한다. def __iter__(self): r..

Python 2024.07.21

[전문가를 위한 파이썬] 9장 파이썬스러운 객체 내용 정리

9.1. 객체 표현- repr(): 객체를 개발자가 보고자 하는 형태로 표현한 문자열로 반환한다.- str(): 객체를 사용자가 보고자 하는 형태로 표현한 문자열로 반환한다.- bytes(): 객체를 바이트 시퀀스로 표현한다.- format(), str.format(): 특별 포맷 코드를 이용해서 객체를 표현하는 문자열을 반환한다.  9.2. 벡터 클래스의 부활from array import arrayimport mathclass Vector2d: typecode = 'd' # typecode는 Vector2d와 bytes 간의 변환에 사용하는 클래스 속성 def __init__(self, x, y): self.x = float(x) # __init__() 안에서 x와 y를 flolat으로 변환..

Python 2024.06.22

[전문가를 위한 파이썬] 8장 객체 참조, 가변성, 재활용 내용 정리

8.1. 변수는 상자가 아니다- 파이썬 변수는 객체에 붙은 레이블이라고 생각하는 것이 좋다. '상자로서의 변수' 개념이 설명할 수 없는 예:a = [1, 2, 3]b = aa.append(4)print(b)# [1, 2, 3, 4]- 파이썬에서는 객체의 오른쪽에서 객체를 생성하거나 가져온다. 그 후 레이블을 붙이듯이 할당문 왼족에 있는 변수가 객체에 바인딩된다.- 객체에 여러 레이블을 붙이는 것을 별명(alias)이라고 한다.  8.2. 정체성, 동질성, 별명- 서로 다른 두 변수가 동일한 객체에 바인딩되어 있을 경우 '별명'이라고 한다.- 서로 다른 두 변수가 바인딩된 객체가 동일한 값을 가지고 있더라도 메모리 주소(정체성)는 다르다면, 두 변수는 서로의 별명이 아니다. 8.2.1. == 연산자와 is..

Python 2024.06.18

[전문가를 위한 파이썬] 7장 함수 데커레이터와 클로저 내용 정리

7.1. 데커레이터 기본 지식- 데커레이터: 다른 함수를 인수로 받는 콜러블(데커레이트된 함수)- 데커레이터는 데커레이트된 함수에 어떤 처리를 수행하고, 함수를 반환하거나 함수를 다른 함수나 콜러블 객체로 대체한다. # decorate 라는 이름의 데커레이터가 있다고 가정하자.@decoratedef target(): print("running target()") # 위 코드는 아래 코드와 동일하게 동작한다.def target(): print("running target()")target = decorate(target) - 두 코드를 실행한 후 target은 꼭 원래의 target() 함수를 가리키는 것이 아니며, decorate(target)이 반환한 함수를 가리키게 된다.- 데커레이터..

Python 2024.06.10