2017년 2월 16일 목요일

[Python] 생성자


파이썬 클래스에는 인스턴스가 생성과 동시에 자동으로 호출되는 메서드인 생성자가 존재합니다. 파이썬에서는 __init__(self)와 같은 이름의 메서드를 생성자라고 하며, 파이썬 클래스에서 __로 시작하는 함수는 모두 특별한 메서드를 의미합니다.
다음은 생성자인 __init__(self) 메서드를 가진 MyClass 클래스를 정의한 것입니다. 앞서 설명한 것처럼 생성자의 첫 번째 인자도 항상 self이어야 합니다.
>>> class MyClass:
        def __init__(self):
                print("객체가 생성되었습니다.")

다음 코드를보면 인스턴스를 생성하자마자 화면에 메시지가 출력되는 것을 확인할 수 있습니다. 이는 인스턴스가 생성되는 시점에 자동으로 생성자인 __init__(self) 메서드가 호출됐기 때문입니다.
>>> inst1 = MyClass()
객체가 생성되었습니다.
클래스 생성자를 이해했다면 BusinessCard 클래스를 수정해 인스턴스의 생성과 동시에 명함에 필요한 정보를 입력받도록 클래스를 새롭게 정의해 봅시다. 
>>> class BusinessCard:
        def __init__(self, name, email, addr):
                self.name = name
                self.email = email
                self.addr = addr
        def print_info(self):
                print("--------------------")
                print("Name: ", self.name)
                print("E-mail: ", self.email)
                print("Address: ", self.addr)
                print("--------------------")

새로 정의된 BusinessCard 클래스의 생성자는 인자가 4개임을 확인할 수 있습니다. 물론 첫 번째 인자인 self는 생성되는 인스턴스를 의미하고 자동으로 값이 전달되므로 인스턴스를 생성할 때 명시적으로 인자를 전달해야 하는 것은 3개입니다. 따라서 인스턴스를 생성할 때 3개의 인자를 전달해주지 않으면 오류가 발생합니다. 생성자 호출단계에서 오류가 발생하면 인스턴스도 정상적으로 생성되지 않게 됩니다.
>>> member1 = BusinessCard()
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    member1 = BusinessCard()
TypeError: __init__() missing 3 required positional arguments: 'name', 'email', and 'addr'
>>>
새로 정의된 BusinessCard 클래스는 생성자에서 3개의 인자(name, email, addr)를 받기 때문에 다음과 같이 인스턴스를 생성할 때 3개의 인자를 전달해야 정상적으로 인스턴스가 생성됩니다. member1이라는 인스턴스가 생성된 후에는 인스턴스 메서드를 호출해 인스턴스 변수 값을 화면에 출력할 수 있습니다. 
>>> member1 = BusinessCard("Kangsan Lee", "kangsan.lee", "USA")
>>> member1.print_info()
--------------------
Name:  Kangsan Lee
E-mail:  kangsan.lee
Address:  USA
--------------------
>>>

출처 : https://wikidocs.net/1740


댓글 없음:

댓글 쓰기