Python study (23) 썸네일형 리스트형 연산자 오버로딩 단항 연산자 오버로딩벡터(Vector) 클래스를 만들고, 몇 가지 단항 연산자를 오버로딩해보겠다. 이를 통해 부호 변경(-), 절대값(abs), 그리고 반전(~) 연산자를 벡터에 대해 사용할 수 있도록 하겠다.class Vector: def __init__(self, x, y): self.x = x self.y = y def __neg__(self): """부호 변경: -벡터""" return Vector(-self.x, -self.y) def __abs__(self): """벡터의 절대값 (유클리드 거리)""" return (self.x ** 2 + self.y ** 2) ** 0.5 def __invert.. 다중 상속 (Multiple inheritance) 내장 자료형 상속파이썬 내장 자료형을 상속할 때, 종종 특정 메소드를 오버라이드했음에도 불구하고 예상대로 동작하지 않는 경우가 발생할 수 있다. 이는 파이썬이 내부적으로 C로 구현된 메소드들을 직접 호출하기 때문이다. 여기서는 이 문제의 원인과 이를 해결하는 방법에 대해 설명하겠다.원인파이썬의 내장 자료형(예: list, dict, str 등)은 대부분 C 언어로 구현되어 있으며, 이 때문에 성능이 매우 뛰어나다. 하지만 이로 인해 특정 메소드들이 내부적으로 직접 C 함수 호출을 통해 구현되어 있다. 따라서, 이러한 메소드를 오버라이드해도 파이썬의 특정 연산이 직접 C 함수를 호출하면, 오버라이드된 메소드가 무시될 수 있다.예를 들어, dict를 상속하여 setitem메소드를 오버라이드했을 때, upda.. 인터페이스 프로토콜(Protocol)파이썬에서 프로토콜(Protocol)은 인터페이스와 비슷한 개념으로, 특정 역할을 완수하기 위한 메서드 집합을 정의한다. 프로토콜은 타입 힌팅(type hinting)과 정적 타입 검사(static type checking)를 지원하는 도구로 사용될 수 있다. 파이썬의 typing 모듈에서 제공하는 Protocol 클래스를 사용하여 프로토콜을 정의할 수 있다.프로토콜의 개념프로토콜은 다음과 같은 특징을 가진다:명시적 구현 강제 없음: 클래스가 특정 프로토콜을 명시적으로 구현하지 않더라도 해당 프로토콜에 정의된 메서드를 모두 구현하고 있다면 그 프로토콜을 따르는 것으로 간주된다.유연성: 다양한 클래스들이 동일한 프로토콜을 따를 수 있어 코드의 유연성이 증가한다.타입 힌팅 지원: 정.. 시퀀스 해킹, 해시, 슬라이스 사용자 정의 시퀀스형 Vector 클래스class Vector: def __init__(self, *args): self._values = list(args) def __len__(self): return len(self._values) def __getitem__(self, index): if isinstance(index, slice): return Vector(*self._values[index]) elif isinstance(index, int): return self._values[index] else: raise TypeError("Invali.. 파이썬스러운 객체(Pythonic object) 파이썬스러운 객체"파이썬스러운 객체"라는 표현은 Python의 철학과 관례를 잘 따르는 객체를 의미한다. Python은 명확하고 간결하며 직관적인 코딩 스타일을 지향하며, 이러한 철학을 잘 반영한 객체를 "파이썬스럽다"고 표현할 수 있다.Pythonic한 객체의 특징명확하고 간결한 코드: Pythonic한 객체는 코드를 읽기 쉽고 이해하기 쉽게 작성한다. 복잡한 로직을 단순하고 직관적으로 표현하려고 노력한다.PEP 8 준수: Python의 스타일 가이드인 PEP 8을 준수한다. 이는 일관된 코드 스타일을 유지하고, 가독성을 높이는 데 도움이 된다.Duck Typing: Pythonic한 객체는 덕 타이핑을 따른다. 객체의 타입보다는 객체가 필요한 메서드나 속성을 가지고 있는지에 중점을 둔다.공개와 비공개.. 객체 참조, 가변성, 재활용 파이썬 변수파이썬에서 변수는 데이터를 저장하는데 사용되는 이름이다. 변수를 사용함으로써 프로그램에서 데이터를 더 쉽게 관리하고 이해할 수 있다.변수의 정의와 할당: 파이썬에서 변수를 생성하고 값을 할당할 때는 = 연산자를 사용한다. 예를 들어,*x = 10은 x라는 이름의 변수에 10이라는 값을 할당한다.동적 타이핑: 파이썬은 동적 타입 언어이다. 이는 변수에 특정한 데이터 타입을 사전에 지정할 필요 없이, 값을 할당하는 순간 해당 변수의 데이터 타입이 결정된다는 의미이다. 예를 들어, x = 10 후에 x = "hello"로 재할당할 수 있으며, 이 경우 x의 타입이 정수에서 문자열로 변경된다.변수명 규칙: 변수명은 문자, 숫자, 밑줄 문자(_)를 포함할 수 있지만, 숫자로 시작할 수는 없다. 또한 파.. 함수 데커레이터(Decorator) & 클로저(Closure) 데코레이터(Decorator)파이썬의 데커레이터는 기본적으로 함수나 메서드의 동작을 변경하거나 확장하기 위한 강력한 도구이다. 데커레이터는 다른 함수를 인자로 받는 함수이다. 데커레이터는 함수를 감싸는(또는 장식하는) 방식으로 작동하여 함수의 전후에 추가적인 코드를 실행할 수 있게 해준다.데커레이터의 작동 원리파이썬에서 데커레이터는 다음과 같이 작동한다:데커레이터는 함수를 인자로 받는다.데커레이터 내부에서, 원래의 함수를 호출하는 새로운 함수를 정의한다.이 새로운 함수는 추가적인 기능을 수행하고, 원래의 함수를 호출할 수 있다.데커레이터는 이 새로운 함수를 반환한다. 이 반환된 함수는 원래의 함수를 "장식"하고, 원래 함수명을 사용하여 호출될 때마다 새로운 기능을 실행한다.기본 데커레이터 예시def my.. 일급 함수 디자인 패턴 전략 패턴(Strategy Pattern)전략 패턴(Strategy Pattern)은 객체지향 디자인 패턴 중 하나로, 알고리즘을 실행 중에 선택하거나 교체할 수 있도록 해주는 패턴이다. 이 패턴은 알고리즘의 사용을 캡슐화하고, 이를 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있게 해준다. 전략 패턴은 특히 알고리즘을 사용하는 클라이언트와 알고리즘 자체를 분리하고 싶을 때 유용하다.전략 패턴의 구성 요소Context (컨텍스트): 전략을 사용하는 역할을 한다. 필요한 전략을 설정하고, 전략을 이용해 연산을 수행한다.Strategy (전략): 모든 전략의 공통 인터페이스이다. 이 인터페이스를 구현함으로써 구체적인 알고리즘(전략)들이 정의된다.ConcreteStrategy (구체적인 전략): St.. 이전 1 2 3 다음