클래스 내에 정의된 함수, 메소드라고 한다.
메소드의 첫 번째 인자는 항상 self여야 한다?
class MyClass:
def method(str):
print("method",str)
def add(a,b):
return a+b
ob = MyClass()
ob.method(ob.add(1,2))
TypeError: MyClass.add() takes 2 positional arguments but 3 were given
라는 에러가 뜬다.
이는 메소드의 첫번 째 인자는 self이기 때문에 1, 2 말고도 메소드의 첫번 재 인자로 항상 파라미터가 전달되기 때문에 발생하는 문제다. 모든 메소드에는 self라는 첫 번째 파라미터가 있기 때문이다. 메소드가 객체에서 호출되면 self 파라미터가 자동으로 전달된다.
메소드의 첫번째 파라미터를 반드시 self라고 이름지을 필요는 없지만 관례다.
첫 번째 파라미터가 self임을 확인하는 것이 메소드와 함수를 구별할 수 있는 가장 빠른 방법
class MyClass2:
def method(self, str):
print("method",str)
def add(self, a,b):
return a+b
obj = MyClass2()
print("obj.method(obj.add(3,5))")
print(obj.method(obj.add(3,5)))
print()
print("MyClass.method(obj,str)")
print(MyClass2.method(obj,"멍충멍충"))
print()
print("obj.method(str)")
print(obj.method("멍충멍충"))
print()
print("obj.add(3,5)")
print(obj.add(3,5))
print()
obj.method(obj.add(3,5))
method 8
None
MyClass2.method(obj,str)
method 멍충멍충
None
obj.method(str)
method 멍충멍충
None
obj.add(3,5)
8
다음과 같이 출력되는 것을 확인할 수 있다.