티스토리 뷰

시작에 앞서 본 내용은 학습 내용을 기록하기 위함이며 내용에 틀린 점이 있을 수 있으니 이점 유의 부탁드립니다.


__init__

initialize, constructor

 

생성자, 초기화자, 초기화 함수



용어 설명
가변 객체(Mutable Object) : 값이 변하더라도 메모리에 할당된 주소 값이 일정한 객체 
                                                 Ex. List, Dict,... 등

객체(Object) :
클래스에 선언된 모양 그 자체
                         클래스의 인스턴스(instance)
                         모든 인스턴스를 대표하는 포괄적인 의미

인스턴스(Instance) :
클래스가 메모리에 할당된 상태
                                   인스턴스는 객체에 포함된다.
                                   추상적인 개념과 구체적인 객체 사이의 관계에 초점을 맞출 경우에 사용
                                   원본으로부터 생성된 복제본을 의미

추후 클래스 및 객체, 인스턴스에 대해 아카이브할 예정

생성자(Initialize)
def __init__(self):
새로 생성된 클래스 인스턴스에 대해 자동으로 필요한 값, 출력 등을 초기값으로 세팅하는 역할

  • 새로 생성된 클래스 인스턴스에 필요한 값, 출력이 자동으로 실행된다. 
class foo:
    def __init__(self):
        print('안녕하세요')

var = foo()
안녕하세요

위 코드 실행 결과와 같이
__init__ 함수의 역할중 하나는 Class가 호출될 때 자동으로 실행되는 함수 이다.

  • 인자 전달
    전달받은 값으로 인스턴스 변수 초기화
class foo:
    def __init__(self, name):
        self.name = name

var = foo('F7 project')  # 인스턴스 생성 및 인자 전달

print(var.name)  # 인스턴스 변수 속성참조(attribute references)
F7 project

  • 인스턴스의 함수(메서드)에서 변수 사용
class foo:
    def __init__(self, name):
        self.name = name
        
    def hello(self):
        print(f'안녕하세요 {self.name}님')  # 인스턴스의 함수(메서드)에서 변수 사용

var = foo('F7 project')  # 인스턴스 생성 및 인자 전달

var.hello()
안녕하세요 F7 project님

초기화자, 초기화 함수라고 불리는 이유?(필자의 생각)

더보기

초기화란?

initialization



  • 초기화(initialization) : 변수 선언 초기에 지정된 값
자바, C 등과 같은 언어의 경우 변수 이름만 먼저 선언이 가능하다.
이후 변수를 사용하기 위해 반드시 값을 넣어주는 작업이 필요하며,
이를 초기 지정 값 설정, 초기화(초기값 설정)라고 한다.

  • Language : C 
    변수 초기화 예시
#include <stdio.h>
int main(void)
{
    int num;  // 변수 선언
    num = 1;  // 변수 초기화(변수 사용전 값을 넣어주는 작업)
    printf("%d", num);
    return 0
}

  • 클래스 변수 사용
리스트, 딕셔너리와 같이 가변 가능한 객체를 클래스 변수로 선언하여 공유될 때 예상치 못한 결과가 발생한다.
# Class 선언
class Foo:
    list_ = []  # 클래스 변수
        
    def add(self, var):
        self.list_.append(var)
# 인스턴스 a
a = Foo()
a.add(1)

print(a.list_)
[1]
# 인스턴스 b
b = Foo()
b.add(2)

print(b.list_)
[1, 2]

위 결과와 같이
초기화자를 사용하지 않고 클래스 변수로 빈 리스트를 선언하여 사용할 경우
하나의 리스트가 모든 Foo 인스턴스들에 공유된다.

  • 인스턴스 변수 사용
    초기화 함수를 사용한 변수 초기화
# Class 선언
class Foo:
    def __init__(self):
        self.list_ = []  # 인스턴스 변수
        
    def add(self, var):
        self.list_.append(var)
# 인스턴스 a
a = Foo()
a.add(1)

print(a.list_)
[1]
# 인스턴스 b
b = Foo()
b.add(2)

print(b.list_)
[2]

이와 같이
__init__을 통해 클래스 호출 시 자동으로 인스턴스 변수로 선언하여,
모든 인스턴스가 공용으로 수정 가능한 변수가 아닌,
각 인스턴스의 초기값으로 설정해주어 인스턴스 간 간섭이 없도록 하기 때문에,
초기화자, 초기화 함수라 명명한 것이 아닌가 추측함.

참조
 

9. Classes — Python 3.10.7 documentation

9. Classes Classes provide a means of bundling data and functionality together. Creating a new class creates a new type of object, allowing new instances of that type to be made. Each class instance can have attributes attached to it for maintaining its st

docs.python.org

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함