classmethod와 staticmethod의 차이
·
프로그래밍 언어/파이썬
파이썬에서 classmethod와 staticmethod는 클래스를 사용하여 메소드를 정의할 때 사용되는 두 가지 유형의 메소드입니다. 이 두 메소드는 사용 목적과 호출 방식에서 차이가 있습니다. classmethod classmethod는 클래스를 위한 메소드입니다. 첫 번째 매개변수로 클래스 자체(cls)를 자동으로 받습니다. 이 메소드는 클래스 변수와 같은 클래스 레벨의 데이터에 접근하고 수정하는 데 사용됩니다. classmethod는 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 호출할 수 있습니다. 클래스 메소드는 상속 시, 상속받은 클래스의 객체와 함께 해당 클래스를 가리키는 cls 매개변수를 사용하기 때문에 서브클래스에서도 적절하게 동작합니다. staticmethod staticmeth..
파이썬에서 접근제어 지시자
·
프로그래밍 언어/파이썬
파이썬에서는 클래스의 속성과 메소드에 대한 접근 제어를 다루는 방식이 C++, Java 등의 언어와는 다소 다릅니다. 파이썬은 완전한 은닉성(encapsulation)을 제공하는 접근 제어 지시자(public, protected, private)를 명시적으로 제공하지 않습니다. 대신, 네이밍 컨벤션(naming convention)을 통해 속성과 메소드의 접근 수준을 간접적으로 지시합니다. 파이썬의 접근 제어 지시자: 1 Public 멤버: 기본적으로, 파이썬의 모든 클래스 멤버(속성과 메소드)는 public입니다. 클래스 외부에서 자유롭게 접근하고 수정할 수 있습니다. 예: self.name, self.method() 2 Protected 멤버 (_): 속성이나 메소드 이름 앞에 단일 밑줄(_)을 붙여..
Call by Assignment란?
·
프로그래밍 언어/파이썬
파이썬에서는 "Call by Assignment" 또는 "Call by Object Reference"라는 메커니즘을 사용하여 함수에 인자를 전달합니다. 이 용어는 파이썬이 함수의 인자를 처리하는 방식을 설명하는 데 사용되며, "Call by Value"와 "Call by Reference"의 전통적인 구분과는 약간 다릅니다. Call by Assignment의 작동 원리: 변수 할당: 파이썬에서 변수에 값을 할당할 때, 실제로는 객체에 대한 참조를 생성하는 것입니다. 변수는 단지 메모리 상의 객체를 가리키는 이름일 뿐입니다. 함수 호출 시: 함수에 인자를 전달할 때, 객체 참조가 함수로 전달됩니다. 즉, 함수의 매개변수는 전달받은 객체에 대한 새로운 참조를 생성합니다. 가변 객체와 불변 객체: 불변 객..
r string, u string이란
·
프로그래밍 언어/파이썬
파이썬에서 문자열을 다룰 때, `r`문자열과 `u`문자열이라는 두 가지 특별한 문자열 표기법이 자주 사용됩니다. 각각의 표기법은 문자열을 정의할 때 특정한 목적을 가지고 있습니다. r 문자열(Raw String) r문자열은 이스케이프 시퀀스(예: \n(개행), \t(탭) 등)를 무시하고 문자열의 내의 모든 문자를 그대로 표현하고자 할 떄 사용됩니다. 즉, 백슬래시(\)가 특별한 처리 없이 일반 문자로 취급됩니다. 주로 정규 표현식과 같이 백슬래시를 자주 사용하는 문자열에서 유용하게 사용됩니다. 이는 백슬래시를 이스케이프할 필요 없이 편리하게 문자열을 정의할 수 있게 합니다. raw_string = r"C:\Users\Example\Documents" print(raw_string) # 출력: C:\Use..
__repr__, __str__의 차이점
·
프로그래밍 언어/파이썬
__repr__와 __str__는 파이썬에서 객체를 문자열로 표현하기 위해 사용되는 두 가지 매직 메소드입니다. 이 둘은 비슷해 보일 수 있지만, 사용 목적과 호출되는 상황에서 차이가 있습니다. __repr__ 메소드: __repr__의 주 목적은 객체의 공식적인 문자열 표현을 제공하는 것입니다. 이 문자열은 가능한 한 해당 객체를 정확하게 나타낼 수 있어야 합니다. 이상적으로는, __repr__에 의해 반환된 문자열을 사용하여 해당 객체를 재생성할 수 있을 정도로 정확해야 합니다(예: eval(repr(object)) == object). __repr__는 주로 개발자가 사용하며, 디버깅과 로깅에서 유용하게 활용됩니다. 파이썬 인터프리터에서 객체를 단독으로 평가했을 때 보이는 결과는 __repr__ 메..
__new__, __init__ 차이점
·
프로그래밍 언어/파이썬
__new__와 __init__는 객체 지향 프로그래밍 언어인 파이썬에서 클래스의 인스턴스 생성 과정에 관여하는 두 가지 특별한 메소드입니다. 이 둘은 서로 다른 목적과 시점에서 호출되며, 객체의 생명주기에서 중요한 역할을 수행합니다. __new__ 메소드: __new__는 클래스의 새 인스턴스를 생성할 때 호출되는 클래스 메소드(class method)입니다. __new__는 클래스의 첫 번째 인수로 전달되며, 반드시 object를 반환해야 합니다. 이 메소드는 인스턴스가 메모리에 할당되기 전에 호출됩니다. __new__ 메소드는 주로 불변 타입이나 싱글톤 패턴과 같이 인스턴스 생성 과정을 커스텀하게 제어할 필요가 있을 때 오버라이드합니다. __new__의 주요 목적은 인스턴스를 생성하고 반환하는 것입..
매직메소드란?
·
프로그래밍 언어/파이썬
파이썬의 매직 메소드(magic methods)는 더블 언더스코어(double underscores)로 시작하고 끝나는 특별한 메소드입니다(예: __init__, __str__). 이러한 메소드는 파이썬의 내장 동작과 밀접하게 연관되어 있으며, 파이썬의 데이터 모델을 정의하는 데 사용됩니다. 클래스 내에서 이러한 매직 메소드를 구현함으로써, 클래스의 인스턴스들이 내장 타입처럼 동작하게 하거나 특정 파이썬 문법에 반응하도록 할 수 있습니다. 매직 메소드와 다른 메소드 타입의 차이점: 매직 메소드: 파이썬의 특별한 동작을 구현하기 위해 미리 정의된 이름을 가진 메소드입니다. 예를 들어, 객체의 생성과 초기화를 담당하는 __init__, 객체를 문자열로 표현하기 위한 __str__, 두 객체의 비교를 위한 _..
MRO(Method Resolution Order)
·
프로그래밍 언어/파이썬
파이썬에서 MRO(Method Resolution Order)는 클래스에서 메서드를 검색할 때 사용되는 순서를 말합니다. 특히 파이썬의 클래스 상속이 다중 상속을 포함할 수 있기 때문에, 어떤 순서로 메서드를 찾아야 할지 결정하는 규칙이 필요합니다. 파이썬은 이를 위해 C3 선형화 알고리즘을 사용하여 클래스의 MRO를 결정합니다. 이 알고리즘은 클래스의 상속 구조를 선형 리스트로 변환하여, 메서드 호출 시 어떤 클래스의 메서드를 사용할지 명확하게 합니다. MRO의 중요성 MRO는 다중 상속 시 발생할 수 있는 복잡성과 모호성을 해결합니다. 특정 메서드를 호출할 때, 파이썬은 이 MRO 리스트를 따라서 해당 메서드를 가진 첫 번째 클래스를 찾아 그 메서드를 실행합니다. 이는 프로그램의 일관성을 유지하고 예..