self가 필요한 이유

행동하는 개발자·2022년 10월 5일
0

PySide, PyQt

목록 보기
6/20

self

클래스 내에 정의된 함수, 메소드라고 한다.
메소드의 첫 번째 인자는 항상 self여야 한다?

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

다음과 같이 출력되는 것을 확인할 수 있다.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글