Python/Python Programming

[Python] 객체 지향 프로그래밍 - __init__() 메소드를 정의하는 이유

Pydole 2018. 4. 28. 19:27

 

파이썬 __init__() 메소드

 

__init__() 객체가 생성될 때, 호출되는 메소드로써, 객체의 초기화를 담당. init는 최기화한다는 뜻. (initialize)

 


 

 

1. __init__()를 지정하지 않았을 때

 

class ClassLst:
    lst = ['a','b','c']

    def addlst(self, text):
        self.lst.append(text)


    def print_lst(self):
        print(self.lst)


if __name__ == '__main__':
    a = ClassLst()
    a.addlst('d')
    print(a.print_lst())

    b = ClassLst()
    b.addlst('e')
    print(b.print_lst())
    
    -----------------------
    
    ['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd', 'e']

 

  

 클래스 속성으로 정의된 lst를 ClassLst의 모든 인스턴스가 공유되어 b의 결과에  'd' 가 포함되었다.

 

 

 

 

 

2. __init__()를 지정하였을 때

 

class ClassLst:
    def __init__(self):
        self.lst = ['a','b','c']

    def addlst(self, text):
        self.lst.append(text)


    def print_lst(self):
        print(self.lst)


if __name__ == '__main__':
    a = ClassLst()
    a.addlst('d')
    print(a.print_lst())

    b = ClassLst()
    b.addlst('e')
    print(b.print_lst())
    
    -------------------------------------
    
    ['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'e']

 

  

 __init__() 안의 lst를 각 객체마다 고유한 인스턴스를 사용하므로, 정상적으로 출력된다.