초보 이해 @ classmethod 및 @ staticmethod

  • staticmethod 는 클래스 에 정 의 된 함수 에 해당 하기 때문에 하나의 방법 이 인 스 턴 스 와 관련 되 지 않 고 특정한 클래스 와 관련 되 지 않 으 면 staticmethod 로 정의 하 는 것 을 추천 합 니 다. 그러면 코드 를 한눈 에 알 수 있 을 뿐만 아니 라 유지 코드 에 도 유리 합 니 다.
  • 하위 클래스 호출 방법 은 스텔스 로 들 어 오 는 매개 변 수 는 이 대상 에 대응 하 는 클래스 이 고 호출 과정 에서 동적 으로 대응 하 는 클래스 변 수 를 생 성 합 니 다.

  • classicmethod 와 staticmethod 류 를 이해 하 는 것 은 데이터 구조 로 대상 을 만 들 수 있 습 니 다.클래스 를 호출 할 때 클래스 의 인 스 턴 스 대상 을 만 들 었 습 니 다.대상 이 생 성 되면 python 은 init () 방법 이 실현 되 었 는 지 확인 합 니 다.init () 가 구현 되 었 다 면, 인 스 턴 스 대상 은 첫 번 째 매개 변수 (self) 로 전 달 됩 니 다.
    예 를 들 어 날짜 정 보 를 저장 하 는 클래스 Date 를 정의 합 니 다. 초기 화 함 수 를 다시 정의 합 니 다.
    class Date(object):
    
        day = 0
        month = 0
        year = 0
    
        def __init__(self, day=0, month=0, year=0):
            self.day = day
            self.month = month
            self.year = year
        def tellDate(self):
            print 'Today is %s-%s-%s'%(self.day,self.month,self.year)
     
      如果我们需要调用tell Date方法,我们就必须先创建一个实例,或者使用Date().tellDate() 
       
      
    date1 = Date()
    date1.tellDate()

    어떻게 클래스 이름 호출 함 수 를 직접 사용 합 니까?
    @ classmethod 나 @ staticmethod 를 사용 하면 클래스 이름 을 사용 할 수 있 습 니 다. 방법 명 () 호출 함수
    현재 우리 가 Date 의 인 스 턴 스 를 많이 만들어 야 한다 고 가정 합 니 다. 날짜 정 보 는 문자열 로 외부 에서 들 어 옵 니 다. 형식 은 'dd - mm - yy' 입 니 다.필요 한 일
  • 날짜 정보 문자열 parse 를 년 월 일 세 변 수 를 포함 하 는 원 그룹 으로 만 듭 니 다.
  • Date 대상 을 예화 할 때 년 월 일 을 매개 변수 로 전달한다.

  • 이렇게:
    day, month, year = map(int, string_date.split('-'))
    date1 = Date(day, month, year)

    python 은 C + + 처럼 다시 불 러 올 수 없 기 때문에 class method 를 도입 합 니 다. ,self 인 자 는 필요 없 지만 첫 번 째 인 자 는 자신의 클래스 를 나타 내 는 cls 인 자 를 필요 로 합 니 다.
    @classmethod
        def from_string(cls, date_as_string):
            day, month, year = map(int, date_as_string.split('-'))
            date1 = cls(day, month, year)
            return date1
    
    사용 시 직접 분류 할 수 있 습 니 다. 방법 명 ()
    이렇게 프로 그래 밍 하 는 장점 은 다음 과 같다.
  • 분해 문자열 작업 은 중복 사용 할 수 있 으 며, 우 리 는 매개 변 수 를 한 번 만 입력 해 야 합 니 다.
  • OOP;
  • cos 는 클래스 자체 이지 클래스 의 인 스 턴 스 가 아 닙 니 다. 우리 가 Date 를 부모 클래스 로 할 때 그 하위 클래스 도 from 을 가지 게 됩 니 다.string 방법
  • class method 와 비슷 한 것 은 staticmethod 이지 만, 자신의 대상 을 나타 내 는 self 와 자신의 클래스 의 cls 인 자 를 표시 할 필요 가 없습니다. 함 수 를 사용 하 는 것 과 같 습 니 다.
    @staticmethod
        def is_date_valid(date_as_string):
            day, month, year = map(int, date_as_string.split('-'))
            return day <= 31 and month <= 12 and year <= 3999
    

    모든 프로그램 및 실행 결과
    class Date(object):
    
        day = 0
        month = 0
        year = 0
    
        def __init__(self, day=0, month=0, year=0):
            self.day = day
            self.month = month
            self.year = year
            
        def tellDate(self):
            print 'Today is %s-%s-%s'%(self.day,self.month,self.year)
        @classmethod
        def from_string(cls, date_as_string):
            day, month, year = map(int, date_as_string.split('-'))
            date = cls(day, month, year)
            return date
    
        @staticmethod
        def is_date_valid(date_as_string):
            day, month, year = map(int, date_as_string.split('-'))
            return day <= 31 and month <= 12 and year <= 3999
    
    if __name__ == '__main__':
        date1 = Date()
        date1.tellDate()
        date2 = Date.from_string("14-04-2016")
        date2.tellDate()
        print Date.is_date_valid("14-04-2016")
     
       

    Today is 0-0-0
    Today is 14-4-2016
    True

    업데이트:
    좋 은 자 료 를 발 견 했 습 니 다. staticmethod 와 classmethod.

    좋은 웹페이지 즐겨찾기