클래스 안에는 우리가 함수들을 여러개 선언하여 클래스라는 객체를 생성하고 인스턴스를 생성해 사용한다.
여기서 우리가 클래스 안에 내장된 함수들을 흔히 '메소드'라고 하는데 일반적으로 우리 인스턴스 메소드라 하는것은 개별적으로 동작하는 함수들을 생성하고자 할 때 사용한다. 인스턴스 함수는 일반적인 클래스에서 봤듯이 첫번째 인자로는 인스턴스를 가리키는 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를 호출하여 생성된 총 객체수를 출력하는것을 볼 수 있다.
'Language > Python' 카테고리의 다른 글
[Python] Mac OS : Selenium 실행시 'chromedriver'는 Apple에서 악성 소프트웨어가 있는지 확인할 수 없기 때문에 열 수 없습니다 (0) | 2021.12.30 |
---|---|
파이썬 리스트에서 특정 문자열 모두 삭제하기 (0) | 2021.01.09 |
파이썬 f string {a : b} (0) | 2020.10.10 |
Python Django django-admin.py startproject를 했지만 프로젝트가 생성되지 않을때. (0) | 2020.04.15 |
Python 가상환경(venv) 만들기/시작하기 (0) | 2020.04.15 |