Python Class

김신영·2024년 9월 23일

Python

목록 보기
2/10
post-thumbnail

Python Class 요약

  • 클래스 선언: class 키워드를 사용.
  • 메서드 선언: 인스턴스 메서드는 첫 번째 인자로 self를 받음.
  • 필드 선언: 인스턴스 필드는 self.field_name으로, 클래스 필드는 클래스 내부에서 직접 선언.
  • __init__: 인스턴스를 초기화하는 생성자, 인스턴스가 만들어진 후 호출됨.
  • __new__: 인스턴스를 생성하는 메서드, 인스턴스가 만들어지기 전에 호출됨.
  • 오버로딩 미지원: 파이썬은 메서드 오버로딩을 지원하지 않지만, 기본값과 가변 매개변수를 통해 비슷한 기능을 구현 가능.
  • 정적 메서드: @staticmethod를 사용하여 선언, 클래스와 인스턴스에 독립적.

Python의 클래스 선언

파이썬에서 클래스를 선언하는 방법은 간단합니다. 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))

정적 메서드 vs 클래스 메서드

  • @classmethod: 클래스를 첫 번째 인자로 받으며, 클래스 변수를 사용하거나 클래스와 관련된 작업을 수행할 때 사용.
  • @staticmethod: 독립적인 함수처럼 동작하며, 클래스나 인스턴스의 상태와 무관한 작업을 수행할 때 사용.

@classmethod

  • 첫 번째 인자로 클래스(cls)를 받습니다.
    • 여기서 cls는 클래스를 가리키며, 클래스 변수와 상호작용할 수 있습니다.
  • 메서드가 인스턴스가 아닌 클래스 자체와 관련된 작업을 수행할 때 사용됩니다.
  • 클래스 변수에 접근하거나, 클래스 메서드를 호출하는 데 주로 사용됩니다.
class MyClass:
    class_variable = 10
    
    @classmethod
    def class_method(cls):
        print(f"클래스 변수: {cls.class_variable}")

MyClass.class_method()  # 클래스 메서드 호출

@staticmethod

  • 첫 번째 인자로 selfcls를 받지 않습니다.
    • 정적 메서드는 클래스나 인스턴스의 상태에 의존하지 않으므로, selfcls를 받지 않습니다.
  • 인스턴스나 클래스와 무관하게 독립적으로 동작하는 메서드입니다.
  • 외부 함수처럼 동작하지만, 클래스 내부에 논리적으로 포함될 필요가 있을 때 사용합니다.
class MyClass:
    @staticmethod
    def static_method():
        print("이것은 정적 메서드입니다.")

MyClass.static_method()  # 정적 메서드 호출
profile
Hello velog!

0개의 댓글