• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

_add__() 의 위치가 궁금 합니다.

22.03.15 23:50 작성 조회수 263

0

객체 끼리의 더하기를 보고 있습니다.
아래 소스 처럼
class Fruit():
def __init__(self, name, price):
self.name = name
self.price = price

def __add__(self, other):
return self.price + other.price

f1 = Fruit('Orange', 7000)
f2 = Fruit('apple', 3000)

print(f1+f2)

print(dir(f1))

위 소스 보면 + 를 할면 알아서 __add__() 메소드가 호출 되는데요

print( dir(int)) 해보면

네임스페이스에 __add__가 보이고 해서 제 생각에

__add__() 메소드는 어딘가에 존재 하는 메소드 인데

int 클래스에서도 override 했고, Fruit 이라는 class에서도 override 했고

문법에서 + (더하기)를 하면 내부적으로 _add__()를

호출 하는구나 생각했습나다.

 

__add__() 메소드를 가지고 있는 class는 먼가요

자바처럼 Object 인건가요?

 

 

답변 1

답변을 작성해보세요.

0

네 내부적으로 type 클래스 하위에 구현되어 있고

구글 검색으로 __add__ 구현 형태를 파이썬 공식문서에 가보시면 확인 하실 수 있어요~

열심히 하시네요!!

김제하님의 프로필

김제하

2022.03.21

강사님 안녕하세요! 질문자는 아닙니다만, 질문 게시글로 다시 쓰기보다는  댓글로 비슷한 주제로 다는 것이 다른 분들이 볼 때도 좋지 않을까 하여 댓글로 여쭤봅니다. 

1. 다음과 같이 이해하는 게 맞을까요??

--------

그렇다면 print(type(int)) 에서  <class 'int> 를 확인했고, print(dir(int)) 에서 '__add__'라는 매직 메소드가 int class에 있다는 걸 확인했다.  

' + ' 연산자를 사용하면 

'int' class 에 __add__ 라는 메소드를 호출하여 계산한다.

그런데, 이는 magic method이므로 사용자가 원하는 대로 overriding을 하여 customizing 할 수 있다.  

그래서

class Fruit():
def __init__(self, name, price):
self.name = name
self.price = price

def __add__(self, other):
return (self.price + other.price) + 0.8

이와 같이 작성할 수 있다.  

----

 

2. 그러면 두 번째 질문입니다. 다른 질문 글에서 저럴 경우 '+' 로 기본 built in 함수 호출로 재귀적으로 호출되지 않나 라는 내용을 확인했습니다.  

이에 대한 답변으로 '클래스 형태로 구현해서 메소드 상속을 통해서 구현해야 합니다. 나중에 수업에서 나와요~' 라고 하셨습니다.  상속, 오버라이딩 부분이면 level 3 강의까지 기다려야 하나요??

먼저 level 3의 상속 부분을 듣고 와도 이해하는데 문제가 되지 않나요???