본문 바로가기

프로그래밍/Python29

[Python] Class Metaprogramming References Fluent Python Contents Class Factory Function, Class Builder, Class Decorator Import Time vs. Runtime Basic of Metaclasses 클래스 메타프로그래밍(Class Metaprogramming)은 실행 도중에 클래스를 생성하거나 커스터마이징하는 기술을 말합니다. 클래스는 파이썬의 일급 객체이므로, class라는 키워드를 사용하지 않고도 언제든 함수를 사용하여 생성할 수 있습니다. 클래스 데코레이터도 함수지만, 데코레이트된 클래스를 조사하고, 변경하고, 심지어 다른 클래스로 대체할 수 있습니다. 메타클래스(metaclasses)는 클래스 메타프로그래밍을 하기 위한 도구로서, 추상 베이스 클래스(ABC.. 2022. 4. 1.
[Python] Attribute Descriptor References Fluent Python Contents Attribute Descriptors Overriding Descriptor Non-Overriding Descriptor [Python] 동적 속성과 프로퍼티 이번 포스팅은 지난 포스팅에 이어서 설명되는 부분들이 꽤 있습니다. 이점 유의 바랍니다.. ! 디스크립터(descriptor)를 사용하면 여러 속성에 대한 동일한 접근 로직을 재사용할 수 있습니다. 예를 들어, 장고와 SQL Alchemy의 ORM(object-relational mapping)에 있는 필드는 디스크립터로 구현되어 있어서, 데이터베이스 레코드의 필드에 들어 있는 데이터를 파이썬 객체 속성으로 상호 변환할 수 있게 해줍니다. 디스크립터는 __get__(), __set__.. 2022. 3. 31.
[Python] 동적 속성과 프로퍼티 References Fluent Python Contents Dynamic Attributes (__getattr__) __new__ read-only properties (@property, @cache, @cached_property) read/write properties Property Factory Handling Attribute Deletion Attributes and Functions for Handling Attributes 파이썬에서는 데이터 속성과 메소드를 통틀어 속성(attributes)라고 합니다. 메소드는 단지 호출할 수 있는(callable) 속성일 뿐입니다. 데이터 속성과 메소드 외에도 프로퍼티를 정의할 수 있습니다. 프로퍼티를 사용하면 클래스 인터페이스를 변경하지 않고도 .. 2022. 3. 30.
[Python] Futures References Fluent Python Contents concurrent.futures 라이브러리 Future 객체 Blocking I/O와 GIL Executor.map() 이번 포스팅에서는 concurrent.futures 라이브러리에 대해서 알아보려고 합니다. 이 라이브러리는 여러 독립적인 스레드를 생성하고 결과를 큐에 수집하는 간단한 패턴을 구현해줍니다. 이 패키지는 프로세스도 지원하기 때문에 연산 집약적인 태스크에서 유용합니다. 그리고 비동기 작업의 실행을 나타내는 객체인 "future"의 개념도 간단하게 살펴보겠습니다. 이 개념은 concurrent.futures뿐만 아니라 asyncio 패키지의 기반이 되기도 합니다. 우선 간단한 웹 다운로드 예제를 통해 살펴보도록 하겠습니다. Con.. 2022. 3. 30.
[Python] Concurrency Models References Fluent Python Contents threading, multiprocessing, asyncio Concurrency(동시성)은 한 번에 많은 것을 처리하는 것이고, Parallelism(병렬성)은 한 번에 많은 작업을 수행하는 것입니다. 둘은 같지 않지만, 관련은 있습니다. 동시성는 구조(structure)에 관한 것이고, 병렬성은 실행(execution)에 관한 것입니다. 동시성은 병렬화할 수 있는(반드시 그런 것은 아니지만) 문제를 해결하기 위해 솔루션을 구성하는 방법을 제공합니다. 이번 포스팅에서는 파이썬이 어떻게 한 번에 많은 것들을 처리하는지 알아볼 예정입니다. 여기에는 concurrent(동시) 프로그래밍 또는 parallel(병렬) 프로그래밍이 포함될 수 있습니.. 2022. 3. 29.
[Python] 코루틴(Coroutines), yield from References Fluent Python Contents Classic Coroutines - Basic Behavior Decorators for Coroutines Coroutine Termination and Error Handling Returning a Value from the coroutines yield from 'to yield'라는 단어를 찾아보면 '생산한다(produce)'와 '양보한다(give way)'라는 두 가지 뜻을 볼 수 있습니다. 파이썬 제너레이터에서 yield 키워드를 사용할 때, 이 두 가지 의미가 모두 적용됩니다. 예를 들어 yield item 문장은 next()의 호출자가 받을 값을 생성하고, 양보하고, 호출자가 진행하고 또 다른 값을 소비할 준비가 되어 다음번 .. 2022. 3. 27.
[Python] Context Mangers and else Blocks References Fluent Python Contents with statement and context manager protocol else clause in for, while, and try statements contextlib 패키지 : @contextmanager 이번 포스팅에서는 with문, else절, Context Manager에 대해서 살펴보도록 하겠습니다. else Blocks beyond if else절은 if뿐만 아니라 for, while, try문에서도 사용할 수 있습니다. 생각보다 이 기능은 잘 알려져 있지 않습니다. for/else, while/else, try/else의 의미는 서로 밀접한 연관이 있지만, if/else와는 상당히 다릅니다. 규칙은 다음과 같습니다. f.. 2022. 3. 26.
[Python] Iterables, Iterators, and Generators References Fluent Python Contents Iterables and Iterators Generators and yield Generator Expressions itertools 모듈 (count, takewhile) Generator Functions in the Standard Library yield from Iterable Reducing Functions iter() Function 데이터 처리에서 반복을 기본입니다. 만약 데이터가 메모리에 다 들어가지 않는다면, 각 항목들을 지연(lazily)시켜 가져와야 합니다. 즉, 한 번에 하나씩 그리고 필요할 때 가져와야 합니다. 이것이 바로 이터레이터가 하는 역할입니다. 이번 포스팅에서는 이터레이터 패턴이 파이썬 언어에 어떻게 구현.. 2022. 3. 25.
[Python] 연산자 오버로딩 References Fluent Python Contents Operator Overloading @ Infix Operator Augmented Assignment Operator Overloading 연산자 오버로딩은 사용자 정의 객체가 +와 | 같은 중위 연산자, -와 ~와 같은 단항 연산자를 사용할 수 있게 해줍니다. 파이썬에서는 여기에서 더 나아가 함수 호출(()), 속성 접근(.), 항목 접근 및 슬라이싱([])도 연산자로 구현되어 있지만, 이번 포스팅에서는 단항 연산자와 중위 연산자에 대해서 살펴보겠습니다. import math class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y def __repr__(self): return.. 2022. 3. 24.
[Python] Interfaces, Protocols, and ABCs References Fluent Python Contents Dynamic/Static Protocols Goose Typing ABCs in the Standard Library The numbers ABCs and Numeric Protocols 부족한 영어 실력과 생소한 내용으로 부족할 수 있습니다.. ㅠ.ㅠ 지적은 언제나 환영이므로, 덧붙이고 싶거나 잘못된 내용이 있다면 언제든지 댓글로 남겨주세요.. ! 객체지향 프로그래밍는 인터페이스에 관한 것이라고 할 수 있습니다. 파이썬의 타입을 이해하는데 가장 좋은 방법은 그 타입이 제공하는 메소드(인터페이스)를 아는 것입니다. 프로그래밍 언어에 따라서, 인터페이스를 정의하고 사용하는 여러 방법이 있습니다. Python 3.8부터는 4가지 방법이 있는데, .. 2022. 3. 23.