Python/Python
-
[Python] 함수형 프로그래밍 이란Python/Python 2024. 7. 3. 18:21
함수형 프로그래밍 페러다임에서는 프로그램의 상태를 변경하는 일련의 흐름의 단계가 아닌 수학적인 함수 평가를 통한 프로그램 플로우를 달성한다. 순수한 함수형 프로그래밍 상태의 변경을 피하고 가변데이터 구조를 이용한다.함수형 프로그래밍의 일반적인 기본 용어를 아라보자Side Effect(부작용): 함수가 자신의 로컬 환경 바깥에 있는 상태를 수정한다면 해당 함수는 Side Effect을 가진다. 다시 말해 Side Effect이란 함수를 호출한 결과로 발생되는 함수 바깥에서 관찰 할 수 있는 모든 변경이다. Side Effect의 예시로는 글로벌 변수의 수정, 함수 범위 바깥에서 이루어지는 객체의 속성 변경, 외부 서비스로의 데이터 저장 등이 있다. side effect는 OOP 개념의 핵심이다. OOP에서..
-
[Python] 싱글-디스패치 함수(single-dispatch function)Python/Python 2024. 7. 3. 16:59
객체지향 프로그래밍에서 JAVA나 C++ (다른랭기지도 있겠지만 생략) 등 에서 같은 함수를 2개 이상 작성하여 매개변수에 따라서 함수 처리를 다르게 하는 것을 본 적이 있을것이다. 그것을 오버로딩이라고 한다.파이썬은 오버로딩을 지원하지 않는다.결론부터 말하자면 오버로딩은 지원하지 않는다. 파이썬은 연산자 오버로딩(던더메서드를 활용한 add, sub 등등) 은 제공하지만 함수와 메서드 오버로딩은 지원하지 않는다. 한 모듈 안에서 같은 이름을 사용하면 맨 마지막으로 정의된 매서드가 앞에 모든 정의를 덮어 씌워버린다.그렇다면 오버로딩을 못하나?파이썬은 쉬운 언어이므로 다른 방법으로 메서드 오버로딩과 같은 개념으로 지원한다. 메서드/서브클래싱을 이용: 함수가 매개변수를 구분하도록 해당 타입의 메서드로 정의함으..
-
[Python] 디스크립터(Discriptor)Python/Python 2024. 7. 3. 14:09
디스크립터란 무엇인가?파이썬에서는 다른언어와 다르게 디스크립터 라는 개념이 있다.이게 무엇이냐면 객체 속성을 참조했을 때 어떻게 되어야 하는지 커스터마이즈 할 수 있다.다시 말해 클래스는 한 속성의 관리를 다른 클래스에게 위임(delegate) 할 수 있다.디스크립터 클래스들은 세 개의 특별한 메서드에 기반하며, 이 클래스들은 디스크립터 프로토콜을 형성한다.__set__(self, obj, vaule): 흔히 아는 세터 (Setter)다.__get__(self, obj, owner=None): Getter__detete__(self, obj): 속성에서 del이 불렸을 때 호출__get__, __set__ 을 구현한 디스크립터를 데이터 디스크립터라고 부른다, __get__ 만 구현한 디스크립터를 비데이..
-
[Python] 파이썬 접근지정자 강제 접근 방법 파이썬 네임맹글링Python/Python 2024. 7. 2. 18:11
Python 에서는 다른 언어와 다르게 public/private/protected 같은 접근지정자가 따로 없다.하지만 우리는 네임맹글링이라는 기법으로 고유한 방법으로 던더(__) 기법을 사용하여 private하게 접근지정자를 만들고들 한다. 일반적으로 private한 변수를 가져오거나 값을 바꿀때에는 getter/setter 사용하여 클래스 내부에서 호출하여 변수를 보호한다. 그런데 파이썬에서 정말로 이러한 방법으로 완전하게 변수를 보호할 수 있을까?결과는 아니다. 아래 코드처럼 클래스 자체를 네임맹글링 방식으로 호출하면 결국에는 변수에 접근이 가능하다.class MyClass: def __init__(self): self.__secret_value = 1 self._..
-
[Python] Pytest Fixtures에 대한 가이드Python/Python 2024. 7. 2. 15:51
일단 해당글은 https://betterstack.com/community/guides/testing/pytest-fixtures-guide/를 읽고 나름 정리한 내용을 바탕으로 정리하는 것 에 목적이 있슴ㅁ_ㅁ A Complete Guide to Pytest Fixtures | Better Stack CommunityLearn how to use Pytest fixtures for writing maintainable and isolated tests.betterstack.com단위 테스트는 소프트웨어 품질에 필수적이지만 반복적인 설정과 데이터 복제로 인해 이를 번거롭게 만들 수 있다. Pytest픽스처는 이러한 문제에 대한 솔루션을 제공함. Pytest Fixtures란?일반적 테스트 설정을 캡슐화하..
-
[Python]: 다중상속과 메서드 결정 순서 MRO(Method Resolution Order)Python/Python 2024. 6. 27. 14:30
다중상속이 무엇인가Python에서 다중 상속은 하나의 클래스가 둘 이상의 부모 클래스로부터 속성과 메서드를 상속받는 기능을 의미합니다. 다중 상속은 매우 유용하지만, 복잡성을 증가시키기 때문에 신중하게 사용해야 합니다. Python의 다중 상속에서 주의해야 할 주요 특징과 개념은 다음과 같습니다. MRO( Method Resolution Order )는 무엇인가?MRO는 다중 상속 시 메서드나 속성을 검색하는 순서를 결정하는 규칙입니다.파이썬은 MRO는 C3 슈퍼클래스 선형화(C3 linearization)에 기반한다. C3 선형화 메서드로 변경하기 이전에는 하나의 클래스가 두 개의 조상을 가졋을 경우, 다중 상속을 계단식으로 사용하지 않는 단순한 경우만 고려했기에 계산과 추적이 매우 쉬웠따~. MRO가..
-
[Python] 파이썬 개발모드 devPython/Python 2024. 6. 25. 22:27
파이썬 3.7부터 전용 개발모드(development mode)에서 파이썬 인터프리터를 호출해 추가적인 런타임을 체크할 수 있다.이 코드를 실행했을 때 발생할 수 있는 잠재적인 이슈를 분석하는 데 유용하다. 올바르게 동작하는 코드에서 이를 적용하는 비용은 매우 높기 때문에 기본적으로 비활성화 되어 있다.두 가지 방법으로 활성화 가능.python -x dev application.pyPYTHONDEVMODE 환경 변수 이용PYTHONDEVMODE = 1 application기본 경고 필터 종류DeprecationWarning(종료 경고): 지원이 종료된 표준 라이브러리 요소ImportWarning(임포트 경고): 모듈 임포트 시 실수와 관련해서 발생PendingDeprecationWarning(종료 예정 ..
-
[Python] ChainMapPython/Python 2024. 6. 25. 17:15
ChainMap은 여러 개의 딕셔너리를 하나의 논리적인 뷰로 결합할 때 사용되는 유용한 도구다 기능적인 관점에서 두 딕셔너리를 병합하는 객체를 만드는 방법은 ChaiMap클래스를 방법이있다.새로운 딕셔너리를 만들고 여러 Update를 호출하는 것 보다 ChainMap 함수를 사용할 때가 더 빠르다. 작동 예시from collections import ChainMapuser_account = {"iban": "GB71BARC200231", "type": "account"}user_profile = {"display_name": "John Doe", "type": "profile"}user = ChainMap(user_account, user_profile)>>> user['iban']'GB71BARC200..