2015년 5월 30일 토요일

파이썬 클래스의 __init__() 메쏘드와 self 인자

  이전 포스트에서 객체를 생성하는 것이 외형상으로 함수를 호출하는 것과 유사하다고 했는데, 사실 객체를 생성할 때 클래스의 __init__() 메소드를 호출하게 된다. 이 메쏘드는 다음과 같이 사용자가 정의할 수 있다.

class 클래스명:
def __init__(self):
메소드 본체

이 예에서 __init__(self) 메쏘드는 객체를 생성할 때 자동으로 호출되는 특수한 메소드이고 반드시 첫 번째 인자는 self 이어야 한다. 이 메쏘드 내부에 클래스 변수를 생성할 수 있다.

class Robot:
   def __init__(self):
       self.nLegs = 2
       self.nArms = 2

이제

>>> asimo = Robot()

이라고 Robot객체를 생성하면 nLegs 와 nArms 필드가 생성되고 초기화 되었음을 알 수 있다.

>>> asimo.nLegs
2
>>> asimo.nArms
2

객체의 필드를 확인하고 싶다면 내장 함수 vars()를 이용하면 된다.

>>> vars(asimo)
{'nLegs': 2, 'nArms': 2}

이 내장 함수는 사실 객체의 __dict__ 내부 필드를 반환한다. 이 내부 필드에 객체의 필드들이 딕셔너리의 요소로 저장되어 있다.

객체를 생성할 때 이름을 사용자가 입력하도록 하려면 다음과 같이 __init__() 메소드에 일반 인자를 self 뒤에 주면 된다.

class Robot:
   def __init__(self, name):
       self.nLegs = 2
       self.nArms = 2
       self.name = name

이제 객체를 생성할 때 이름을 반드시 입력해야 한다.

>>> asimo=Robot('asimo')
>>> asimo.name
'asimo'

만약 이름이 주어지지 않았을 때 ‘dummy’ 라는 이름을 주고 싶다면 다음과 같이 기본값 인자를 사용하면 된다.

class Robot:
   def __init__(self, name=’dummy’):
       self.nLegs = 2
       self.nArms = 2
       self.name = name
    
이제 객체를 생성할 때 이름을 입력하지 않아도 된다.

>>> asimo=Robot()
>>> asimo.name
'dummy'

이와 같이 __init__() 생성자 함수도 파이썬의 일반 함수처럼 가변 개수 인자, 기본값 인자, 키워드 인자 등을 적용할 수 있다.


댓글 없음:

댓글 쓰기