쉬운 케이스와 어려운 케이스가 있다.
1. 쉬운 케이스
### anti-pattern ###
def sum(a, b, c):
return a + b + c
sum(a, b) ## TypeError: sum() missing 1 required positional argument: 'c'
sum()이라는 함수의 인자를 세 개 정의했는데, 실제 사용 시 세 개 미만으로 입력 시 발생한다. 이런 경우는 함수 정의를 다시 살피고 정의한 인자 개수만큼 넣어주면 해결할 수 있다.
2. 어려운 케이스
### anti-pattern ###
class Recommender:
def __init__(self, df):
self.df = df
def sum(self, a, b, c):
return a + b + c
Recommender.sum(a, b, c) ## TypeError: sum() missing 1 required positional argument: 'c'
클래스의 메서드로 선언된 sum()에 분명히 이번엔 a, b, c를 넣었는데 'c'가 없다는 에러가 뜨는 경우가 있다. 알다시피 self는 클래스 선언을 통해 생성되는 객체를 의미하기 때문에, 위의 예시처럼 Recommender.sum()으로 사용하면 그냥 인자 4개짜리 함수가 되는 것이다. 즉 self 자리에 a, a 자리에 b, b 자리에 c가 들어가버려서 "c 자리에는 아무것도 없네요"라는 메시지를 주는 것이다.
아래와 같이 클래스 선언 이후에 사용하게 되면 self 자리에 rc가 들어가고 a,b,c가 각각 맞는 자리에 들어가면서 오류가 해결되게 된다.
### best-practice ###
class Recommender:
def __init__(self, df):
self.df = df
def sum(self, a, b, c):
return a + b + c
rc = Recommender(df)
rc.sum(a, b, c)
Enjoy your code modularization:)