이전 포스트에서 객체를 생성하는 것이 외형상으로 함수를 호출하는 것과 유사하다고 했는데, 사실 객체를 생성할 때 클래스의 __init__() 메소드를 호출하게 된다. 이 메쏘드는 다음과 같이 사용자가 정의할 수 있다.
class 클래스명:def __init__(self):메소드 본체 |
이 예에서 __init__(self) 메쏘드는 객체를 생성할 때 자동으로 호출되는 특수한 메소드이고 반드시 첫 번째 인자는 self 이어야 한다. 이 메쏘드 내부에 클래스 변수를 생성할 수 있다.
class Robot:def __init__(self):self.nLegs = 2self.nArms = 2 |
이제
>>> asimo = Robot() |
이라고 Robot객체를 생성하면 nLegs 와 nArms 필드가 생성되고 초기화 되었음을 알 수 있다.
>>> asimo.nLegs2>>> asimo.nArms2 |
객체의 필드를 확인하고 싶다면 내장 함수 vars()를 이용하면 된다.
>>> vars(asimo){'nLegs': 2, 'nArms': 2} |
이 내장 함수는 사실 객체의 __dict__ 내부 필드를 반환한다. 이 내부 필드에 객체의 필드들이 딕셔너리의 요소로 저장되어 있다.
객체를 생성할 때 이름을 사용자가 입력하도록 하려면 다음과 같이 __init__() 메소드에 일반 인자를 self 뒤에 주면 된다.
class Robot:def __init__(self, name):self.nLegs = 2self.nArms = 2self.name = name |
이제 객체를 생성할 때 이름을 반드시 입력해야 한다.
>>> asimo=Robot('asimo')>>> asimo.name'asimo' |
만약 이름이 주어지지 않았을 때 ‘dummy’ 라는 이름을 주고 싶다면 다음과 같이 기본값 인자를 사용하면 된다.
class Robot:def __init__(self, name=’dummy’):self.nLegs = 2self.nArms = 2self.name = name |
이제 객체를 생성할 때 이름을 입력하지 않아도 된다.
>>> asimo=Robot()
>>> asimo.name
'dummy'
|
이와 같이 __init__() 생성자 함수도 파이썬의 일반 함수처럼 가변 개수 인자, 기본값 인자, 키워드 인자 등을 적용할 수 있다.
댓글 없음:
댓글 쓰기