class 키워드를 사용.self를 받음.self.field_name으로, 클래스 필드는 클래스 내부에서 직접 선언.__init__: 인스턴스를 초기화하는 생성자, 인스턴스가 만들어진 후 호출됨.__new__: 인스턴스를 생성하는 메서드, 인스턴스가 만들어지기 전에 호출됨.@staticmethod를 사용하여 선언, 클래스와 인스턴스에 독립적.파이썬에서 클래스를 선언하는 방법은 간단합니다. class 키워드를 사용하고, 클래스 이름을 지정한 후, 클래스 내부에 메서드와 필드를 정의합니다.
class MyClass:
pass # 빈 클래스
클래스 내부에서 메서드는 함수처럼 정의되지만, 인스턴스 메서드는 첫 번째 매개변수로 self를 받아야 합니다. 이 self는 해당 메서드를 호출한 객체 자신을 가리킵니다.
class MyClass:
def my_method(self):
print("This is a method.")
클래스의 필드는 인스턴스 필드와 클래스 필드로 나눌 수 있습니다.
__init__ 메서드 안에서 self를 사용해 선언합니다.class MyClass:
class_field = 10 # 클래스 필드
def __init__(self, value):
self.instance_field = value # 인스턴스 필드
__init__과 __new__ 오버라이딩__init__: 인스턴스가 생성된 후, 인스턴스를 초기화할 때 사용하는 생성자 메서드입니다. 인스턴스가 만들어진 후 호출됩니다.__new__: 인스턴스가 생성될 때 호출되며, 실제 인스턴스를 만드는 메서드입니다. 보통 super().__new__(cls)를 통해 인스턴스를 생성하고 반환해야 합니다.__init__ 오버라이딩 예:class MyClass:
def __init__(self, name):
self.name = name
__new__ 오버라이딩 예:class MyClass:
def __new__(cls, *args, **kwargs):
instance = super().__new__(cls)
return instance
파이썬은 메서드 오버로딩을 기본적으로 지원하지 않습니다. 즉, 같은 이름의 메서드를 매개변수의 개수나 타입에 따라 다르게 정의할 수 없습니다. 대신 매개변수의 기본값을 설정하거나 가변 매개변수를 활용해 유사한 기능을 구현할 수 있습니다.
class MyClass:
def my_method(self, a, b=0):
print(a + b)
def my_method_with_varargs(self, *args):
print(sum(args))
@classmethod: 클래스를 첫 번째 인자로 받으며, 클래스 변수를 사용하거나 클래스와 관련된 작업을 수행할 때 사용.@staticmethod: 독립적인 함수처럼 동작하며, 클래스나 인스턴스의 상태와 무관한 작업을 수행할 때 사용.@classmethodcls)를 받습니다.cls는 클래스를 가리키며, 클래스 변수와 상호작용할 수 있습니다.class MyClass:
class_variable = 10
@classmethod
def class_method(cls):
print(f"클래스 변수: {cls.class_variable}")
MyClass.class_method() # 클래스 메서드 호출
@staticmethodself나 cls를 받지 않습니다.self나 cls를 받지 않습니다.class MyClass:
@staticmethod
def static_method():
print("이것은 정적 메서드입니다.")
MyClass.static_method() # 정적 메서드 호출