Python - class에서 self와 super

BigbrotherShin·2020년 7월 18일
0
post-thumbnail

self

출처: 05-1 클래스 - 점프 투 파이썬

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말고 다른 이름을 사용해도 상관없다.

super([type[, object-or-type]])

이는 클래스에서 재정의된 상속 된 메서드를 액세스할 때 유용합니다.

class A:
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        super().__init__()

b = B() # print A

References

profile
JavaScript, Node.js 그리고 React를 배우는

0개의 댓글