홈>
객체 데이터에서 작동하지 않는 보조 기능을 포함하는 클래스가 있습니다. 일반적으로 나는이 메소드를 비공개로 두려고하지만 Python에 있으므로 그런 것이 없습니다. 테스트 에서이 메소드를 호출 할 수 있도록 클래스의 인스턴스를 인스턴스화 해야하는 것은 약간 바보 같은 것으로 나타났습니다. 이러한 방법을 정적으로 유지하거나 정적으로 선택해야하는 확실한 이론적 이유가 있습니까?
- 답변 # 1
- 답변 # 2
메소드가 현재 인스턴스에 액세스 할 필요가없는 경우, 클래스 메소드, 정적 메소드 또는 일반 함수로 만들 수 있습니다.
클래스 메소드는 현재 클래스를 첫 번째 매개 변수로 가져옵니다. 이를 통해다른 클래스 메소드 또는 정적 메소드를 포함한 클래스 속성에 액세스 할 수 있습니다. 메소드가 다른 클래스 메소드 또는 정적 메소드를 호출해야하는 경우 올바른 선택입니다.
정적 메소드는 명시 적 인수만을 얻습니다. 실제로 클래스 나 인스턴스에서 확인할 수있는 함수일뿐입니다. staticmethods의 주요 요점은 전문화입니다. 하위 클래스에서 staticmethod를 재정의하고 기본 클래스의 메소드 (classmethod 또는 instancemethod)를 사용하여 재정의 된 버전의 staticmethod를 호출 할 수 있습니다. 클래스와 별도로 함수를 가져옵니다 (이 시점에서 게으름에 접해 있지만 동적 가져 오기 등이 편리한 경우가 몇 가지 있습니다)일반 함수는 클래스 기반 디스패치, 상속, 멋진 것들이 아닌 일반 함수입니다. 그러나 동일한 모듈의 몇 클래스가 내부적으로 사용하는 클래스이고 모듈이나 모듈 API의 일부가 아닌 도우미 함수 인 경우 원하는 것일 수 있습니다.
마지막 메모 : 파이썬에서 "일종의"프라이버시를 가질 수 있습니다. 대부분 밑줄로 하나의 이름 (속성/메소드/클래스 또는 일반 함수)을 접두어로 붙이는 것은 "이것은 구현 세부 사항이며, API의 일부가 아니며, 존재 여부를 알 필요도 없습니다. 예고없이 변경되거나 사라질 수 있으므로 코드를 사용하지 않으면 문제가됩니다. "
관련 자료
- html - Django 프로젝트의 정적 리소스는 어디에 저장해야합니까?
- sql - 객체를 동일한 유형의 다른 객체에 연결할 때 1 - n 또는 m : n 관계를 사용해야합니까?
- java - 서블릿에 대한 모든 doGet/doPost 호출에 대해 공유 Gson 객체를 인스턴스화해야합니까?
- java - 정적 메서드 및 필드가 정의 된 클래스의 인스턴스에서 메모리를 차지합니까?
- 클래스 객체를 사용하여 Java의 내부 정적 클래스에 액세스 할 수없는 이유
- oop - Java에서 Object 클래스를 참조해야합니까?
- Java 8 대상이있는 이후 버전에서 javac 11 링크 메서드를 어떻게 재정의해야합니까?
- 파이썬 매직 메서드를 직접 사용해야합니까?
- javascript - localStream 개체를 rtcpeerconnection addtrack 메서드에 인수로 전달하는 방법
- python - Django에서 주석과 모델 메서드는 언제 사용해야합니까?
- generics - 인수를 허용하지 않는 정적 메서드가 Java 스트림에서 어떻게 작동합니까?
- java - 클래스의 "set"메소드가 "void"또는 "boolean"을 반환해야합니까?
- typescript에서 병합 된 개체의 유형은 무엇입니까?
- java - 인터페이스의 정적 메소드에는 스칼라 애플리케이션에서 -target - jvm-18이 필요합니다
- json - Items 객체는 동일한 속성을 가져야합니다
- wordpress - 단위 테스트에서 WP_CLI 정적 메서드 모의
- javascript - 정적 메서드를 호출하는 클래스 별칭 만들기
- c# - 객체를 반복하고 문자열 필드를 수정하기 위해 이러한 메서드를 단순화
- 파이썬 객체는 없음 또는 비어있는 척해야합니다
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- JavaScript 변수를 HTML div에 '출력'하는 방법
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 문자열에서 특정 문자 제거
구조적인 이유로 클래스에서 상기 메소드를 유지하려면
첫 번째 인수는 객체 자체로 해석되지 않으며 클래스 또는 해당 클래스의 객체에서 사용할 수 있습니다. 그래도 메소드에서 클래스 속성에 액세스해야하는 경우 클래스 메소드로 만들 수 있습니다.@staticmethod
를 사용하여 정적 메소드를 만들 수도 있습니다. 데코레이터 :클래스 메소드의 첫 번째 인수는 분명히 인스턴스 대신 클래스가 될 것입니다.
클래스 나 인스턴스 속성을 사용하지 않으면 정적이 아닌 "이론적"이유를 알 수 없습니다. 일부 IDE는 클래스/인스턴스 속성을 사용하지 않거나 변경하지 않는 경우 메소드를 정적으로 만들라는 소프트 경고로 강조 표시합니다.