Python Class : @staticmethod, @classmethod
클래스 안에는 우리가 함수들을 여러개 선언하여 클래스라는 객체를 생성하고 인스턴스를 생성해 사용한다.
여기서 우리가 클래스 안에 내장된 함수들을 흔히 '메소드'라고 하는데 일반적으로 우리 인스턴스 메소드라 하는것은 개별적으로 동작하는 함수들을 생성하고자 할 때 사용한다. 인스턴스 함수는 일반적인 클래스에서 봤듯이 첫번째 인자로는 인스턴스를 가리키는 self가 들어가고 그 다음 인자들을 받는다. 밑의 코드에서의 __init__과 graduate과 같은 함수들이 일반적으로 흔히 말하는 인스턴스 메소드이다.
1 2 3 4 5 6 7 8 9 | class school(): count = 0 def __init__(self,ID,age): #초기화함수 __init__또한 인스턴스 메서드이다. self.ID = ID self.age = age school.count += 1 print("현재 등록된 학생 수 : {}".format(school.count)) def graduate(self,graduate):#이러한 일반적인 메서드들을 인스턴스 메서드라고 한다. self.graduate = graduate | cs |
1 2 3 4 5 6 7 8 9 10 | class school1(school):#위의 school클래스 상속 @staticmethod def score(score): if(score >= 80): print("A입니다") elif(score < 80 and score >= 60): print("B입니다") else: print("C입니다") | cs |
2 . 클래스 메소드
클래스 메소드란 클래스 변수를 사용하기 위해 생성되는 메소드(및 함수)이다. 클래스 메소드는 메소드를 정의할때 첫 번째 인자로 일반적인 인스턴스 함수에서는 self라는 인스턴스 자체를 가리키는 매개변수를 썼지만 클래스 메소드에서는 클래스를 의미하는 cls라는 인자를 받고 cls를 이용해 클래스에 접근한다. 정적 메소드에서는 선언시 데코레이터 @staticmethod를 작성해 주었지만 클래스 메소드를 위해서는 데코레이터 @classmethod를 작성해 주어야 한다. 클래스 메소드의 형식은 다음과 같다.
형식 : def (클래스명)(cls,(인자들))
또한 정적 메소드에서도 봤듯이 클래스 메소드 역시 객체가 아닌 클래스명을 이용한 호출을 한다. 호출 형식인 다음과 같다
형식 : (클래스명).(메소드명)(인자)
클래스 메소드는 주로 생성된 객체 수 반환과 같이 클래스 자체에 대해 관리해야할 기능이 있는 경우 사용한다.
1 2 3 4 5 6 7 8 9 10 11 | class test(): count1 = 0 def __init__(self,num): self.num = num test.count1 += 1 @staticmethod def qw(num): print("입력값 : {0}".format(num)) @classmethod def count(cls): print("현재 생성된 객체 수 {}".format(cls.count1)) | cs |
다음 코드는 해당 코드에 대한 클래스 메소드를 이용한 출력이다. 총 4개의 인스턴스를 생성하고 나서 클래스명인 test로 class메소드 count를 호출하여 생성된 총 객체수를 출력하는것을 볼 수 있다.