Python/기타

Python의 __init__ 과 self의 이해

Jong_seoung 2023. 10. 16. 14:47
반응형

파이썬 클래스의 기본 구조

파이썬 클래스는 객체지향 프로그래밍의 기본 구성 요소 중 하나로, 데이터와 해당 데이터를 처리하는 메서드를 포함하는 사용자 정의 데이터 타입이다.

클래스는 객체의 설계도 이며, 객체는 클래스로부터 생성된 인스턴스이다.

클래스를 사용하면 데이터와 함꼐 메서드를 논리적으로 묶어서 사용할 수 있다.

 

class ClassName:
    # 클래스 변수 (모든 객체가 공유하는 변수)
    class_variable = 0

    # 초기화 메서드 (생성자, 객체가 생성될 때 자동으로 호출됨)
    def __init__(self, parameter1, parameter2, ...):
        # 인스턴스 변수 (객체마다 별도로 유지되는 변수)
        self.instance_variable1 = parameter1
        self.instance_variable2 = parameter2
        # ...

    # 클래스 메서드 (클래스에 속한 함수, 첫 번째 매개변수로는 관례적으로 cls를 사용)
    @classmethod
    def class_method(cls, parameter):
        # ...

    # 인스턴스 메서드 (객체에 속한 함수, 첫 번째 매개변수로는 관례적으로 self를 사용)
    def instance_method(self, parameter):
        # ...

 

클래스 메서드와 인스턴스 메서드

클래스 메서드는 클래스 자체의 속성에 접근하거나 수정이 가능하고 아래처럼 호출해서 사용한다.

# 클래스 메서드
@classmethod
def class_method(cls, parameter):
    # cls를 사용하여 클래스 변수에 접근 가능
    cls.class_variable += 1

# 호출 방법
ClassName.class_method(parameter)

인스턴스 메서드는 메서드가 속한 객체의 속성에 접근하거나 수정할 수 있으며 아래처럼 객체를 통해 호출한다.

또한 인스턴스 메서드는 객체와 관련된 동작을 수행하므로 해당 객체를 통해서만 호출할 수 있다.

# 인스턴스 메서드
def instance_method(self, parameter):
    # self를 사용하여 인스턴스 변수에 접근 가능
    self.instance_variable = parameter


# 호출 방법
obj = ClassName()
obj.instance_method(parameter)

 

클래스 메서드는 클레스 레벨의 동작을 수행할 때 사용되고 객체의 상태에 독립적인 동작을 정의할 때 유용하다.

인스턴스 메서드는 객체와 관련된 동작을 수행할 때 사용된다. 객체의 상태에 기반한 작업을 정의하거나, 객체의 속성을 수정하는 등의 동작을 수행한다.

 

__init__ 메서드의 활용과 구조

__init__ 메서드의 구조

__init__메서드는 파이썬 클래스에서 특별한 메서드로, 객체가 생성될 때 자동을 호출되는초기화 메서드이다.

인스턴스를 초기화하고 속성을 설정하는데 주로 사용된다.

class ClassName:
    def __init__(self, parameter1, parameter2, ...):
        self.instance_variable1 = parameter1
        self.instance_variable2 = parameter2
        # ...

self는 객체 자체를 나타내는 매개변수로 자바에서는 this와 비슷한 기능을 하는 것 같다. 이를 통해 메서드 내부에서  객체의 속성에 접근하고 수정할 수 있다.

객체. instance_variable1 = (매개변수) parameter1 이 되는 것이다.

 

__init__메서드의 활용

객체의 속성 초기화

class를 사용해서 객체를 만들때 __init__메서드가 호출되고, 객체의 속성을 초기화하는 역할을 한다.

 

기본값 설정

매개변수로 기본값을 넘겨서 객체를 생성할 때 속성값을 저장할 수 있다.

 

다른 객체와의 관계 설정

class Teacher:
    def __init__(self, name):
        self.name = name

class Student:
    def __init__(self, name, teacher):
        self.name = name
        self.teacher = teacher  # 다른 객체와의 관계 설정

 

 

self 매개변수의 의미와 활용

self의 의미

self는 파이썬에서 현재 객체(인스턴스)를 나타낸다.

메서드의 첫 매개변수를 self로 선언해주고 self로 접근할 수 있다.

 

self의 활용

객체의 속성에 접근

self를 사용하여 해당 메서드가 속한 객체의 속성에 접근할 수 있다.

class MyClass:
    def __init__(self, x):
        self.x = x

    def print_x(self):
        print(self.x)

 

다른 메서드 호출

다른 메서드를 호출할 때도 self를 사용하여 객체 내의 다른 메서드를 활용할 수 있다.

class MyClass:
    def __init__(self, x):
        self.x = x

    def print_x(self):
        print(self.x)

    def update_x(self, new_x):
        self.x = new_x
        self.print_x()  # 다른 메서드 호출

 

다른 객체 생성

메서드 내에서 self를 사용하여 같은 클래스의 다른 객체를 생성할 수 있다.

이를 통해서 메서드가 호출된 현재 객체와 연관된 새로운 객체를 생성할 수 있다.

class MyClass:
    def __init__(self, x):
        self.x = x

    def create_new_object(self, new_x):
        new_object = MyClass(new_x)  # 새로운 객체 생성
        return new_object

 

클래스 변수에 접근

클래스 변수에 접근할때 사용할 수 있지만 일반적으로 클래스명을 사용하여 클래스 변수에 접근하는 것이 권장사항이다.

class MyClass:
    class_variable = 0

    def __init__(self, x):
        self.x = x

    def update_class_variable(self):
        self.class_variable += 1  # 클래스 변수에 접근

 

 

주의점

상속의 오용

  • 상속을 오용하여 클래스간 너무 깊은 계층 구조를 만들지 않도록 주의해야 한다.
  • 복잡한 계층구조는 유지보수를 어렵게 만들 수 있다.

다형성 이해

  • 다형성을 올바르게 이해하고 활용해야 합니다.
  • 같은 이름의 메서드를 상속받은 클래스에서 다르게 구현함으로써 다형성을 실현할 수 있다.

메서드 네이밍

  • 메서드명은 해당 메서드가 무엇을 하는지 명확하게 표현하여한다.
  • 가독성을 높이고 코드 이해를 돕기 위해서 의미 있는 이름을 선택해야 한다.
class Calculator:
    def calculate_sum(self, numbers):  # 좋은 예: 의미 있는 메서드명
        pass

    def do_stuff(self):  # 나쁜 예: 메서드명이 모호함
        pass

 

반응형