클래스의 메서드는 일반 함수를 정의하는 것과 동일한데 한 가지 첫 번째 인자는 반드시 self가 되어야 한다는 점이 다르다. 관례적으로 메서드 정의들 사이에는 한 줄 공백을 준다.
class Robot:def __init__(self, name='dummy'):self.name = namedef talk(self):print('Hi. I am %s.'% self.name) |
self라는 변수를 클래스 함수의 첫번째 인자로 받아야 하는 것은 파이썬만의 (불필요해 보이는) 특징이다. 문법이 이렇게 규정되어 있으니 사용자는 거기에 맞추어 작성해 주어야만 한다. 메서드 내에서는 이 self 변수를 통해서 기정의된 필드를 접근할 수 있으며 또 한 새로운 필드를 생성하는 것도 가능하다. talk() 메서드 내부에서 name 이라는 필드를 self를 통해서 (즉, slef.name 와 같이) 사용했음을 알 수 있다. 객체의 필드는 이와 같이 메서드 내에서 반드시 self 변수를 통해서만 접근할 수 있다.
객체의 필드와 메서드 목록을 확인하고 싶으면 내장함수 dir()를 이용하면 된다.
>>> asimo=Robot(‘asimo’)>>> dir(asimo)['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'talk'] |
위에서 보면 매직 메서드들 다음에 name, talk 등 필드와 메서드의 이름을 모두 확인할 수 있다.
이제 asimo라는 Robot 클래스 객체를 통해서 메서드를 호출할 수 있다. 객체명 뒤에 점(.)을 찍고 함수명을 명시하면 된다.
>>> asimo.talk()Hi. I am asimo. |
메서드를 호출하는 쪽에서는 정의부의 self인자는 무시하고 (없는 것으로 간주하고) 인자를 주면 된다. 따라서 asimo.talk() 메서드는 아무런 인자를 주면 안된다. __init__() 메서드와 마찬가지로 self 인자 뒤에 일반인자를 줄 수 도 있다.
class Robot:def __init__(self, name = 'dummy'):self.name = namedef talk(self):print('Hi. I am %s.'% self.name)def walk(self, step):print('Sorry. No legs.')def run(self, dist, speed = 10):print('Must go %dm at %dm/s speed.'%(dist, speed))print('Sorry. No legs.') |
이렇게 정의하면 walk()함수는 하나의 일반 인자를 주고 호출해야 하며 run()은 하나 혹은 두 개의 일반 인자를 주어야 한다.
>>> asimo.walk(5)Sorry. No legs.>>> asimo.run(100, 50)Must go 100m at 50m/s speed.Sorry. No legs.>>> asimo.run(100)Must go 100m at 10m/s speed.Sorry. No legs. |
이와 같이 메서도는 첫 번째 인자가 self 라는 점만 제외하면 일반 함수와 정의와 호출하는 방법이 동일하다.
'프로그래밍언어.Lib > 파이썬' 카테고리의 다른 글
MicroPython 개발자의 IoT 발표 (pyCon2016) (0) | 2016.09.27 |
---|---|
윈도7에서 ipython 설치하기 (0) | 2016.01.07 |
파이썬의 Enum 클래스 (버전 3.4 이상) (0) | 2015.06.25 |
scipy 로 상미방의 수치 적분 수행하기 (0) | 2015.06.09 |
파이썬 내장 함수 (4) 연산을 수행하는 내장 함수들 (0) | 2015.05.30 |