Python 95

메서드 오버로딩

- 개요함수의 오버로딩은 로직은 동일하지만 함수의 인자의 개수나 인자의 타입이 다른 경우에 사용할 수 있다하지만 파이썬은 런타임 시점에서 변수의 자료형을 결정하는 동적 타입 언어로서 공식적인 방법으로는 함수 오버로딩 기능을 사용할 수 없다 하지만 파이썬에서도 함수 오버로딩을 구현할 수 있는 몇 가지 방법이 존재한다각각 다음과 같이 표현할 수 있다패킹을 통한 함수의 인자를 객체화하여 함수 오버로딩 구현함수 내에서 자료형에 따른 분기를 통해 함수 오버로딩 구현외부 플러그인 multipledispatch을 사용하여 함수 오버로딩 구현 1) 패킹을 통한 함수 오버로딩 구현class SampleA(): # 패킹을 통해 오버로드를 수행 def add(selfsel, *args): return..

메서드 오버라이딩

- 개요https://monstrosite.tistory.com/17 객체지향 프로그래밍의 3요소 - 상속성객체지향 프로그래밍(Object Oriented Programming) 줄여서 OOP의 3가지 요소에 대해 알아보고자 합니다.첫 번째 시작으로, 상속성에 대해 알아보겠습니다. 위의 코드에서 Knight 클래스는 아주 간단하게monstrosite.tistory.com 파이썬에서 클래스의 메서드 간의 오버라이딩을 통해 상속성을 구현하는 방법을 알아본다 1) 상속된 프로퍼티가 전달되는 시점class ParentEx1(): def __init__(self): self.value = 5 def get_value(self): return self.valueclass Chil..

Getter 메서드와 Setter 메서드

- 개요클래스의 멤버 변수에 직접 접근하는 것은 매우 위험한 일이다따라서 프로퍼티를 사용하여 멤버 변수에 간접적으로 접근하게 된다파이썬에서 프로퍼티를 사용하면 다음의 이점을 얻을 수 있다 변수에 제약을 설정할 수 있다캡슐화를 이끌어낼 수 있다Pythonic한 코드를 작성할 수 있다위와 같이 프로퍼티를 만들게 되면 Getter 메서드를 통해 프로퍼티의 값을 가져오고Setter 메서드를 통해 프로퍼티의 값을 설정할 수 있다이때 어노테이션을 사용하여 Getter / Setter 그리고 메모리 관리를 위한 Deleter를 간단하게 생성할 수 있다 - 프로퍼티를 사용하여 구현한 클래스class SampleA: def __init__(self): self.x = 0 self._y = ..

언더스코어(_)의 사용

- 개요파이썬에서 _(언더스코어)는 다양한 역할을 수행한다이를 간단하게 정리하면 다음과 같다파이썬 인터프리터에서의 마지막 연산 값값의 무시숫자에서의 자리 구분접근제어 수준 지정 1) 언더스코어를 통한 파이썬 인터프리터에서의 마지막 연산 값 반환 외부 IDE가 아닌, 파이썬 인터프리터에서 _(언더스코어)를 사용하면 마지막으로 연산한 값을 반환한다 2) 언더스코어를 통한 값의 무시for value in enumerate(range(10)): print(value) enumerate 연산자는 시퀀스 자료구조에서 인덱스와 값을 반환하는 함수이다위와 같이 실행하면 인덱스와 인덱스에 해당하는 값이 반환되는 것을 볼 수 있다 for _, value in enumerate(range(5)): print(v..

Context Manager Annotation

- 개요이전까지 클래스의 형태로 Context Manager를 만들어 사용했다클래스를 만들어 Context Manager를 구현하는 방식은 예외처리를 정교하게 구현할 수 있지만,만드는 방식이 복잡하여 실질적으로 사용하기는 어렵다 이런 상황에서 함수를 통해 Context Manager를 구현하면 덜 복잡한 방법으로 구현하는 것이 가능하다함수를 통해 구현하므로 Decorator를 사용하면 훨씬 효율적이다Decorator는 함수를 직접 수정하지 않고 기능을 추가하고자 할 때 사용할 수 있다 또 Decorator의 경우, annotation을 통해 훨씬 더 쉽게 사용할 수 있다그러므로 contextlib 모듈을 사용하여 제공되는 Decorator를 이용한 Context Manager 함수를 구현해본다 1) Co..

Context Manager (2)

- 개요Context Manager는 원하는 타이밍에 정확하게 리소스를 할당 및 제공, 반환하는 역할을 담당한다그러나 위의 역할 말고도 Context Manager는 작업을 확장하여 수행하는 것도 가능하다 이번에 알아볼 Context Manager를 통한 작업의 확장은 이전과 마찬가지로 with 메서드를 통해 이뤄지며Context Manager 클래스 내부에서 정의한 매직 메서드를 통해 동작한다 - 작업의 확장 : 작업 시간을 출력하는 타이머 Context Managerimport timeclass ExecutionWithTimer(object): def __init__(self, msg): self.msg = msg # 작업을 시작하는 시점의 시간 저장 def __enter..

Context Manager (1)

- 개요컴퓨터에서 사용할 수 있는 리소스는 제한적이므로 리소스를 조절하며 사용해야 할 필요가 있다file = open('./testfile1.txt', 'w') 위와 같이 파일을 쓰기 모드로 열어 놓은 경우 close 함수를 통해 닫지 않으면 컴퓨터는 지속적으로 리소스를 사용하는 누수 현상이 발생하고 끝내 크래시를 내고 만다 이런 상황에서 사용하는 것이 바로 Context Manager이다Context Manager는 원하는 타이밍에 정확하게 리소스를 할당 및 제공, 반환하는 역할을 한다 따라서 파이썬에서 Context Manager를 어떤 방식으로 제공하고,또 사용자가 어떤 방식으로 Context Manager를 설계할 수 있는지 알아본다 1) 기초적인 Context Managerfile = open(..

객체의 복사

- 개요객체를 복사하는 방법은 총 3가지가 존재한다각각 일반 복사 / 얕은 복사 / 깊은 복사로 표현할 수 있다 일반 복사는 주로 불변 타입(immutable)의 변수를 복사하는 경우에 사용한다대표적으로 int, str, bool 등의 자료형이 있다 반대로 얕은 복사와 깊은 복사는 가변 타입(mutable)의 변수를 복사하는 경우에 사용한다대표적으로 list, set, dict 등이 있다 - 일반 복사일반 복사는 복사 방식에 있어서 다음의 3개로 쪼개어 구분할 수 있다Call by Value : 변수의 값을 복사하여 전달, 원본에 영향을 미치지 않음Call by Reference : 변수의 메모리 주소를 전달, 원본에 영향을 미침Call by Share : 변수의 메모리 주소를 복사하여 전달새로운 객체를..

람다 함수의 활용

- 개요람다 함수의 특징을 간단하게 알아보면 다음과 같다람다 함수는 메모리에서 생성되는 일반 함수와는 다르게 힙 영역에서 생성되어 사용하면 즉시 소멸한다람다 함수의 객체는 사용 후 소멸되어 참조 카운트가 0이 되므로 가비지 컬렉션 대상이 되어 사용한 공간을 회수한다 따라서 재사용성이 높아야 하는 경우 일반 함수를 생성하여 사용하고일시적으로 사용해야 하는 경우 람다 함수를 사용하여 메모리 효율을 높이는 방식으로 코드를 작성하는 것이 좋다 1) 일반적인 람다 함수의 사용 방식lambda 매개변수 : 로직일반적인 람다 함수는 위와 같은 구조로 사용한다이를 활용하는 여러가지 예제를 알아본다 2) 람다 객체람다객체명 = lambda 매개변수 : 로직 람다 함수를 객체화하여 변수로 저장하는 것이 가능하다 cal =..

변수 스코프

- 개요프로그래밍에서의 scope란, 변수, 함수, 객체 등 식별자가 유효한 범위를 의미한다그러므로 각 scope에 따라 다른 설정을 적용해줘야 할 필요가 있다따라서 파이썬에서 변수에 대한 scope와 이를 어떻게 설정하는지 알아본다 1) 전역 scope와 지역 scope# 전역변수 b = 20def foo(): # 지역변수 b = 30 print(f"foo : {b}")def foo2(): print(f"foo2 : {b}")foo()foo2() 위와 같은 코드를 작성하였다함수 foo와 함수 foo2 모두 로컬 scope를 갖고 있지만, 로직에서 차이가 존재한다전자의 경우 지역변수를 사용하고, 후자의 경우 전역변수를 사용한다 위의 코드를 실행한 결과는 위와 같다파이썬은 Local..