파이썬 클래스에는 인스턴스가 생성과 동시에 자동으로 호출되는 메서드인 생성자가 존재합니다. 파이썬에서는
__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
댓글 없음:
댓글 쓰기