python

파이썬 상속 / self / __init__ 개념 정리

cinnamonbrown 2026. 5. 2. 17:54

오랜만에 파이썬의 상속 개념을 복습하면서 관련 개념을 가볍게 정리하고자 한다.

1. 클래스 기본 개념

파이썬에서는 클래스를 선언할 때 다음과 같은 형태를 띤다

class Student:
    pass

s1=Student()

2. self

  • self는 자기 자신이 만든 객체를 의미한다
  • 각 객체의 데이터를 구분해서 사용할 때 필요하다
  • 메서드 안에서 객체의 속성에 접근할 때 self를 사용한다
class Student:
    def set_name(self, name):
        self.name = name

s1 = Student()
s1.set_name("학생1")

실행 결과

학생1

👉 위 코드에서

s1.set_name("학생1")

이 코드를 실행하면 메서드 내부에서 self는 s1을 가리키게 된다.

즉,

self.name = name

은 내부적으로

s1.name = "학생1"

과 같은 의미로 동작한다.


3. __init__

__init__ 은 보통 객체의 속성을 처음 설정할 때 사용된다.
또, 객체를 만들 때마다 필요한 값을 한 번에 넣어줄 수 있기 때문에, 객체마다 다른 데이터를 저장하기 편하다.

class Student:
  def __init__(self,name,age) :
    self.name=name
    self.age=age

s1=Student("민수",20)
s2=Student('영희',23)

print(s1.name,s1.age)
print(s2.name,s2.age)

실행결과

민수 20
영희 22

4 상속

상속을 사용하는 이유

  • 공통된 코드를 다시 작성하지 않아도 된다
  • 코드 재사용이 가능하다
  • 구조를 더 깔끔하게 만들 수 있다
class Animal:
  def eat(self):
    print("먹습니다")

class Dog(Animal):
  def bark(self):
    print("멍멍")

Dog 클래스가 Animal 클래스를 상속 받는데 이때 선언을 괄호치고 상속받을 부모 클래스를 적는다


4.1 메서드 오버라이딩

class Person:
  def introduce(self):
    print("안녕하세요, 저는 사람입니다")

class Student(Person):
  def introduce(self):
    print("안녕하세요, 저는 학생입니다")

p=Person()
s=Student()
p.introduce()
s.introduce()

실행 결과

안녕하세요, 저는 사람입니다
안녕하세요, 저는 학생입니다

4.2 super()

  • 부모 클래스의 메서드를 호출할 때 사용한다
  • 자식 클래스에서 부모의 생성자를 사용할 때 자주 쓴다
  • class Animal: def __init__(self,name): self.name=name class Dog(Animal): def __init__(self,name,age): super().__init__(name) self.age=age

여기서

super().init(name)은

부모 클래스인 Animal의 생성자를 호출해서 name을 먼저 저장하는 역할을 한다.

그 다음 Dog 클래스에서만 필요한 age를 추가로 저장한다.


5. 간단한 활용 예제

다음 조건을 만족하는 동물 클래스를 작성해보세요.

조건

  1. Animal 클래스는 생성자로 이름을 저장한다.
  2. Animal 클래스의 sound()는 기본 소리를 출력한다.
  3. DogAnimal을 상속받고 sound()를 다시 정의한다.
  4. CatAnimal을 상속받고 sound()를 다시 정의한다.
  5. Dog 객체와 Cat 객체를 각각 1개씩 생성한다.
    • 강아지 이름: "초코"
    • 고양이 이름: "나비"
  6. 각 객체의 sound() 메서드를 호출한다.

실행 예시

초코 가 멍멍 짖습니다  
나비 가 야옹 웁니다
class Animal:
  def __init__(self,name):
    self.name=name
  def sound(self):
    print("동물이 소리를 냅니다")

class Dog(Animal):

  def sound(self):
    print(self.name,"가 멍멍 짖습니다")

class Cat(Animal):
  def sound(self):
    print(self.name,"가 야옹 웁니다")

d=Dog("초코")
d.sound()
c=Cat("나비")
c.sound()

실행결과

초코 가 멍멍 짖습니다
나비 가 야옹 웁니다