Python/Glossary[용어 사전]
[ __init__ ] : 생성자, 초기화 함수란 무엇인가?
샰롯
2022. 9. 27. 18:42
시작에 앞서 본 내용은 학습 내용을 기록하기 위함이며 내용에 틀린 점이 있을 수 있으니 이점 유의 부탁드립니다.
__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