@staticmethod 대 모듈 수준 함수


21

이에 대해하지 않습니다 @staticmethod@classmethod! 나는 어떻게 staticmethod작동 하는지 안다 . 내가 알고 싶은 @staticmethod것은 모듈 수준 기능에 대한 적절한 사용 사례입니다 .

나는이 질문을 봤는데, 더 파이썬이기 때문에 정적 메소드보다 모듈 레벨 함수가 선호된다는 일반적인 동의가있는 것 같습니다. 정적 메서드는 클래스에 바인딩되는 이점이 있으므로 해당 클래스 만 클래스를 사용하는 경우에 적합합니다. 그러나 파이썬에서 기능은 일반적으로 클래스가 아닌 모듈로 구성되므로 일반적으로 모듈 함수로 만드는 것도 의미가 있습니다.

정적 메소드는 서브 클래스로 대체 될 수도 있습니다. 이는 서브 시스템을 보는 방법에 따라 장점 또는 단점입니다. 정적 메서드는 일반적으로 "기능적으로 순수"하기 때문에 재정의하는 것이 현명하지 않을 수도 있지만 때로는 편리 할 수도 있습니다 (이것은 "편리하지만 결코 IT를하지 마십시오"라는 경험 중 하나 일 수 있습니다).

정적 메서드 또는 모듈 수준 함수를 사용하기위한 일반적인 규칙이 있습니까? 어떤 구체적인 장점이나 단점이 있습니까 (예 : 향후 확장, 외부 확장, 가독성)? 가능한 경우 사례도 제공하십시오.

답변:


11

기술적으로 정적 메소드와 모듈 함수는 거의 동일하게 작동합니다. 두 경우 모두 표준 함수처럼 작동합니다. 차이점은 배치 된 네임 스페이스입니다. 따라서 결정은 유지 관리 성 / 가독성 중 하나 이상입니다.

일반적으로 이러한 기준 중 일부 또는 전부가 충족되면 정적 방법을 사용합니다.

  • 이미 일반적인 메소드를 가진 기존 클래스가 있습니다
  • 이 함수는 일반적으로 클래스의 객체와 관련이 있지만 특정 인스턴스는 아닙니다.
  • 메소드를 비 정적 메소드 인 것처럼 호출 할 수 있기를 원할 것입니다. 클라이언트 코드를 손상시키지 않고 메소드를 비정적일 수 있습니다.

0

프로그램은 현실의 시뮬레이션입니다. 이런 식으로, 그것은 당신이 현실을 어떻게 인식하는지에 달려 있습니다.

함수는 일부 활동을 나타냅니다. 활동이 일반적 일수록 기능을 사용하여 활동을 시뮬레이션하는 경향이 커집니다. 메소드는 클래스에 바인딩됩니다. 활동이 클래스에 고유할수록 메소드에 의해 더 많이 시뮬레이션되는 경향이 있습니다.

삼각 함수에 대해 생각하십시오. 예를 sin()들어, 각도에 맞는 것을 잘 알고 있습니다. float 숫자를 입력으로 원하고 float를 반환한다는 것을 알고 있습니다. 어쨌든 클래스가 나타내는 각도 데이터 유형이있을 수 있으며 .sin()without 인수는 angle 객체와 .sin(x)함께 작동하는 일반적인 방법 일 수 있으며 단일 인수를 사용하면 클래스의 정적 메서드가 될 수 있습니다. 더 많은 사람들 sin()이 평범한 기능 을하는 것이 더 낫다고 생각할 것이라고 확신합니다 . 그들은 더 익숙합니다.

다른 관점 : 모듈은 클래스 인스턴스와 비슷합니다. 자체 멤버 변수와 멤버 함수가 있습니다. 어떤 의미에서는 싱글 톤 패턴을 구현합니다. 응용 프로그램의 다른 모듈에서 가져올 때마다 정확히 동일한 변수와 함수에 액세스 할 수 있습니다.


0

객체의 심층 데이터 계층 구조의 일부를 인수로 취하는 함수가 있습니다. 대신 데이터 계층의 해당 부분에 도달하는 데 필요한 몇 가지 인수를 전달하는 것이 번거로울 것입니다. 따라서 self 또는 cls를 참조 할 이유가 없습니다. 그러나 기능은 특정 클래스의 객체 일부에만 사용됩니다. 그래서 그것은 나에게 수업 방법처럼 보입니다.

또한 클래스 이름을 가져 오는 것을 선호합니다 ( 'import module'이 아닌 'module import class'에서). 함수를 정적 메소드로 포함하면 메소드를 모듈 레벨 함수로 작성하는 데 다른 가져 오기가 필요하지만 메소드에 액세스 할 수 있습니다.


2
내가 당신이라면 첫 번째 사람의 대답을 피할 것입니다. 혼란 스럽습니다. 대신 두 번째 사람에게 요청자에게 편지를 써야합니다.
Aaron Hall

혹시. 나는 유스가 생각한 것과 일치하거나 일치하지 않을 수있는 사용 사례를 제공하고 있었다.
DVD Avins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.