Python
-
[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] watchdog 액티브리로딩 프레임워크Python 2024. 6. 25. 15:38
액티브 프레임워크란 무엇인가?> 액티브리로드란 코드가 변경되었음을 인식하는프레임워크다. 이를 통해 우리는 어플리케이션을 별도로 개발했을 때 자동으로 리로드 되는 편리함을 가지고 있다.액티브 프레임워크가 무엇인지를 떠나서 기본적으로 다들 보통일반적인 프레임워크들을 많이 사용 했을 것이다 [장고,플라스크 등등)왜 사용하는가?> 해당 기법을 사용하지 않으면 변경할 때 마다 프로그램을 껏다 켜줘야하는 귀찮은 상황이 발생한다. 사용법)- install$ pip install watchdog직접 코드상에 설정하여 감시.import sysimport timeimport loggingfrom watchdog.observers import Observerfrom watchdog.events import LoggingE..
-
ModuleNotFoundError: No module named '_lzma'Python 2023. 10. 27. 12:25
ModuleNotFoundError: No module named '_lzma' 간혹 Ubuntu에서 Python을 apt로 설치하지 않고 wget으로 설치해서 make 할 시. APT에 등록되지 않은 기본 라이브러리들이 설치가 안되는경우가 있따. burin@boss-WS-C621E-SAGE-Series:/data/workspace/AICoverGen$ python3.9 src/webui.py Traceback (most recent call last): File "/data/workspace/AICoverGen/src/webui.py", line 10, in from main import song_cover_pipeline File "/data/workspace/AICoverGen/src/main.py..