딥러닝 모델 코드를 보면서 생소한 파이썬 문법들을 따로 정리하고자 한다. 예전에 윤성우 쌤의 열혈 파이썬 카페에서 파이썬 중급 강의도 들었는데 막상 실제 적용된 코드들을 모르니깐 강의만 쭉 듣고 다 까먹어버렸다. 그런데 모델 짜면서 다시 만난 것이다 ! 역시 이래서 코딩은 결국 공부가 아닌 연습에 더 가깝다고 하나보다 😬

일단 처음 보고 이렇게 신기한 애들은 뭐지 싶었던 것 두 가지이다.

nested function

: 함수 안에서 정의된 함수

파이썬은 객체지향 언어여서 모든 게 다 객체로 이루어졌다는 개념을 기저에 깔면 이해하기가 조금 더 쉽다. 클래스도 결국 객체이고, 데이터 타입들도 다 어떠한 객체이다. 즉 파이썬 내 함수도 결국은 객체이다.

nested function 은 메소드 내의 메소드로 밖의 메소드 인자 값을 넣음으로써 인스턴스화 되고, 반환될 수 있다. 윤성우 쌤의 코드인데

def maker(m):
  def inner(n):
    return m*n 
f1=maker(2)
f2=maker(3)

f1, f2 라는 inner 메소드의 객체가 만들어졌다.

f1(7)
>> 14

f1.inner 의 느낌으로 inner 메소드를 소환시킬 수 있다. (사실 m 은 inner 메소드가 참조하는 값이므로 maker 이 시행된 후 바로 사라지는 것이 맞다. 하지만 나중에 요긴하게 쓰일지 모르는데 꼭꼭 숨겨두자 ! 인 closure 기능을 통해서 inner 메소드의 객체가 저장된 m 을 계속 사용할 수 있게 된다.

클래스 메소드

클래스 변수란 인스턴스가 아닌 인스턴스의 상위 개념인 클래스에 속하는 변수이다. 즉 어떠한 클래스 변수 a 가 있을 때

[클래스 명].a 이렇게도 불러올 수 있고 [인스턴스].a 이렇게 불러올 수도 있다.

@classmethod 는 class 메소드를 만들기 위한 데코레이터이다.

cls 라는 이름으로 클래스는 인자로 전달된다. (self 느낌)

윤성우 쌤의 코드이다.

class Simple:
  @classmethod:
    def get_count(cls):
      return cls.count 

클래스 메소드의 장점은 어떠한 A 클래스 내에 사용된 클래스 메소드가 있고, B,C,D 클래스가 이 A 클래스를 상속받았다고 할 때 , cls 인자가 각 클래스에 맞게 B,C,D 로 바뀐다는 것이다.

kd1=KDate(2025,4,12)
kd2=KDate.next_day(kd1)

에서 부모 클래스 Date 의 클래스 메소드인 next_day 를 자식 클래스 KDate 가 호출했다. 즉 kd2 에는 KDate 의 정보가 담긴다.

출처

윤성우의 열혈 파이썬: 중급편(Story 33-4)