class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
클래스 안에 구현된 함수는 다른 말로 메서드(Method)
라고 부른다.
일반적인 함수를 만들 때 다음과 같이 작성한다.
def 함수명(매개변수):
수행할 문장
...
메서드도 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 다를 것이 없다.
setdata 메서드를 다시 보면 다음과 같다.
def setdata(self, first, second): # ① 메서드의 매개변수
self.first = first # ② 메서드의 수행문
self.second = second # ② 메서드의 수행문
① setdata 메서드의 매개변수
setdata 메서드는 매개변수로 self, first, second 3개 입력값을 받는다. 그런데 일반 함수와는 달리 메서드의 첫 번째 매개변수 self는 특별한 의미를 가진다.
다음과 같이 a 객체를 만들고 a 객체를 통해 setdata 메서드를 호출해 보자.
a = FourCal()
a.setdata(4, 2)
※ 객체를 통해 클래스의 메서드를 호출하려면 a.setdata(4, 2)와 같이 도트(.) 연산자를 사용해야 한다.
setdata 메서드에는 self, first, second 총 3개의 매개변수가 필요한데 실제로는 a.setdata(4, 2)처럼 2개 값만 전달했다. 왜 그럴까? 그 이유는 a.setdata(4, 2)처럼 호출하면 setdata 메서드의 첫 번째 매개변수 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달되기 때문이다. 다음 그림을 보면 객체를 호출할 때 입력한 값이 메서드에 어떻게 전달되는지 쉽게 이해할 수 있을 것이다.
파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용한다. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이다. 물론 self말고 다른 이름을 사용해도 상관없다.
이는 클래스에서 재정의된 상속 된 메서드를 액세스할 때 유용합니다.
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
super().__init__()
b = B() # print A