728x90 All150 [Python] 클래스 메타프로그래밍 클래스 메타프로그래밍은 실행 도중에 클래스를 생성하거나 커스터마이즈하는 기술을 말한다.type() 클래스 생성기(클래스 팩토리)A = type('A', (object,), {'x': 10})print(A().x) # 10클래스를 동적으로 생성할 수 있음 (이름, 상속, 속성 다 지정 가능)class A: 도 사실 내부적으로 type() 호출-> 코드를 클래스로 만들고 싶을 때metaclass 클래스를 만드는 클래스를 커스터마이징class Meta(type): def __new__(cls, name, bases, dct): print(f'📦 클래스 생성됨: {name}') return super().__new__(cls, name, bases, dct)class MyCla.. 2025. 6. 1. [Python] 속성 디스크립터 디스크립터디스크립터를 이용하면 여러 속성에 대한 동일한 접근 논리를 재사용할 수 있다.디스크립터는 __get__(), __set__(), __delete()__ 메서드로 구성된 동적 프로토콜을 구현하는 클래스다.즉, 어떤 클래스가 이 메서드들 중 하나라도 구현하고 있으면,그 클래스의 인스턴스는 디스크립터 역할을 하게 된다.property 클래스는 이 디스크립터 프로토콜을 완벽하게 따르는 대표적인 예이다.실제로 보는 대부분의 디스크립터는 __get__()과 __set()__ 메서드만 구현한다.관련 용어디스크립터 클래스: 디스크립터 프로토콜 구현 클래스관리 대상 클래스: 디스크립터 객체를 클래스 속성으로 선언하는 클래스디스크립터 인스턴스: 관리 대상 클래스의 속성으로 선언된, 디스크립터 클래스의 인스턴스관리.. 2025. 6. 1. [Python] 동적 속성과 프로퍼티 동적 속성Python 객체는 실행 중에 자유롭게 속성을 추가할 수 있다.class User: def __init__(self, name): self.name = nameu = User("Kyu")u.age = 25 # 동적으로 속성 추가print(u.age) # 25print(u.__dict__) # {'name': 'Kyu', 'age': 25}동적 속성을 활용한 데이터 랭글링JSON같은 경우, depth가 깊은 속성에 접근하고자 하면,feed['Schedule']['events'][40]['name']과 같은 구문으로 접근해야할 것이다.하지만 속성에 접근하는 클래스를 따로 둔다면,feed.Schedule.events[40].name 과 같이 자바스크립트같은 문법으로도 접근 가능.. 2025. 6. 1. [Python] 비동기 프로그래밍 코루틴네이티브 코루틴: async def로 정의된 코루틴 함수고전적 코루틴: my_coro.send(data) 호출을 통해 전송된 데이터를 소비하는 제너레이터 함수, 표현식 안에서 yeild 사용제너레이터 기반 코루틴: @types.coroutine으로 데코레이트된 제너레이터 함수비동기 제너레이터: async def로 정의된 제너레이터 함수이며, 본체 안에서 yeild 사용import asyincioimport socketfrom keyword import kwlistMAX_KEYWORD_LEN = 4async def probe(domain: str) -> tuple[str, bool]: loop = asyncio.get_running_loop() # asyncio 이벤트 루프에 대한 참조를 가.. 2025. 6. 1. [Python] 동시 실행자 동시성 스크립트 비교리스트로 동시 작업 실행def download_many(cc_list: list[str]) -> int: for cc in sorted(cc_list): image = get_flag(cc) save_flag(image, f'{cc}.gif') print(cc, end=' ', flush=True) return len(cc_list)리스트 순차대로 반복하기 때문에 결과의 순서 또한 유지된다. (동시 작업 X 순차 작업 O)concurrent.futures로 스레드로 동시작업 실행ThreadPoolExecutor와 ProcessPoolExcutor클래스는 콜러블 객체를 서로 다른 스레드나 프로세스에서 실행하게 해 주는 API를 구현한다. .. 2025. 5. 18. [LeetCode] 175. Combine Two Tables SELECT p.firstName, p.lastName, a.city, a.stateFROM Person AS pLEFT JOIN Address AS a ON p.personId = a.personId조건을 잘 읽자 If the address of a personId is not present in the Address table, report null instead.교집합 구하는거 아니고, left join이었음 2025. 5. 5. 이전 1 2 3 4 ··· 25 다음 728x90