파이썬 클래스 공부하기(__init__, self, super)
클래스는 객체 지향 프로그래밍(OOP)의 핵심 개념이다.
클래스를 사용하면 데이터와 그 데이터를 조작하는 메서드를 하나의 단위로 묶을 수 있다.
파이썬에서 __init__, self, super를 사용하여 클래스를 정의하는 방법을 알아보자.
# 클래스와 객체의 정의
- 클래스(Class): 객체를 만들기 위한 청사진 또는 설계도
- 객체(Object): 클래스를 사용하여 생성된 실제 인스턴스
이다. 클래스==붕어빵 틀, 객체==붕어빵이라는 비유를 어디선가 들었던 것 같다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Person 클래스의 인스턴스 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
# __init__ 메서드
__init__ 메서드는 클래스의 생성자로, 객체가 생성될 때 자동으로 호출된다. 객체를 초기화하는 데 사용되며, 클래스 내부에서 반드시 필요한 변수들(각각의 인스턴스가 가지는 속성)을 설정한다. 이때 첫번째 매개변수는 무조건 self인데 self는 대체 뭘까?
# self 키워드
self는 클래스의 인스턴스 자신을 가리킨다. 메서드의 첫 번째 매개변수로 사용되며, self를 통해서 나중에 클래스 내부의 변수와 메서드에 접근할 수 있습니다.
위의 예제 코드를 보면, Person 클래스를 선언한 다음 그걸 이용해서 Person1, Person2라는 인스턴스를 생성한다.
생성할 때 매개변수 중 self는 생략하고, 각각의 인스턴스에 해당하는 속성들(이름, 나이)를 매개변수로 전달해주면 된다.
이때 person1인스턴스에서는 person1이 self이고, person2 인스턴스에서는 person2가 self가 되는 것이다.
그래서 특정 인스턴스의 속성들을 확인하고 싶을 때, print(self.변수이름) 이렇게 하면 되는데
이때의 self == 그 인스턴스 자기자신이다.
print(person1.name) # 출력: Alice
print(person1.age) # 출력: 30
print(person2.name) # 출력: Bob
print(person2.age) # 출력: 25
# 클래스 상속: super 함수
super 함수는 부모 클래스의 메서드를 호출할 때 사용된다.
상속받은 클래스에서 부모 클래스의 메서드를 확장하거나 재정의할 수 있다.
class Parent:
def __init__(self, name):
self.name = name
def display(self):
print(f"부모 클래스: {self.name}")
class Child(Parent):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def display(self):
super().display()
print(f"자식 클래스: 이름={self.name}, 나이={self.age}")
child = Child("홍길동", 20)
child.display()
위 코드에서는 class Child(Parent): 에서 Child 클래스가 Parent 클래스를 상속받고 있다.
1. def __init__(self, name, age): 에서
super를 사용하여 부모 클래스의 __init__ 메서드를 호출한다.
2. def display(self): 여기서
display 메서드를 재정의하여 부모 클래스의 display 메서드를 호출한 뒤 추가 정보를 출력한다.