• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

함수 또한 객체라는 것과 관련

21.07.28 14:41 작성 조회수 122

2

(Code 1)

def add1(a, b):
return a + b

print(add1(2, 3))

(Code 2)

class Cal:
def __init__(self):
pass

def __call__(self, a, b):
return (a + b)

add1 = Cal()
print(add1(2, 3))

(Code 1)을 실행할 때, 파이썬 내부에서는 (Code 2)가 발생하고 있다고 이해해도 될까요?

답변 2

·

답변을 작성해보세요.

2

네 정확하게 이해하셨습니다. 👍

김백현님의 프로필

김백현

질문자

2021.07.28

자꾸 여쭤봐서 죄송합니다. 의문이 물밀듯이 생겨나서요. ㅠㅠ

import numpy as np
a = np.arange(9)
x = a.reshape(3, 3)

b = x.transpose()와 c = np.transpose(x) 모두 외관상 동일한 결과물을 반환하되, id(b) != id(c)인데요

질문. 내가 transpose를 해주는 패키지를 만든다고 할 때, 그 기능을
c처럼 매직메서드(init 혹은 call?)로 구현할 것인지
b처럼 non 매직 메서드로 구현할 것인지
아니면 b와 c를 둘 다 가능하게 할 것인지
를 정할 때, 어떤 점들을 고려하는가요?

질문. 내가 transpose를 해주는 패키지를 만든다고 할 때, 그 기능을
c처럼 매직메서드(init 혹은 call?)로 구현할 것인지
b처럼 non 매직 메서드로 구현할 것인지
아니면 b와 c를 둘 다 가능하게 할 것인지
를 정할 때, 어떤 점들을 고려하는가요?

우선, b의 경우 transpose는 인스턴스 메서드이고 c의 경우 transpose는 클래스 메서드입니다.

numpy를 만든 개발 팀 입장에서는 방법에 차이이기 때문에 단순히 개발자의 편의를 위해 둘 다 접근해서 사용할 수 있도록 제공해준 것입니다.

결국 개발자가 어떤 방식으로 사용하는 것이 가독성이 있을 지 선택하는 것이죠.

++ 머신러닝에서 코드를 돌릴 때 두 가지 방법 모두 성능상 차이가 없습니다. 가독성을 위해 어떤 방식으로 코드를 작성하면 좋을 지 생각하시면 될 것 같습니다.

김백현님의 프로필

김백현

질문자

2021.07.28

제가 우왕좌왕하면서 계속 질문을 수정해가지구 번거롭게 해드렸네요. 죄송합니다. 아이고..ㅠㅠ 답변 감사드려요.

아닙니다. 화이팅입니다~

1

아닙니다! 편하게 질문하세요 :)

이해하신 것처럼 이게 가능한 이유는 numpy를 사용하는 엔지니어를 위해 numpy 패키지를 개발한 팀이 그렇게 설계한 것입니다. 

둘 다 되는 방식으로 패키지를 설계하는 경우는 선택인 것 같습니다. 모든 라이브러리가 둘 다 제공하는 것은 아니지만 편의를 위해서 둘 다 되는 방식으로 제공해주는 경우가 있는 것이죠.

김백현님의 프로필

김백현

질문자

2021.07.28

감사합니다!