1-9-2. 클래스함수 추가기능 확인하기
클래스의 추가기능들을 알아보고
클래스함수를 사용하는 방법에 대하여 알아보기
어떤 클래스의 인스턴스인지 확인하기
객체가 어떤 클래스로부터 만들어졌는지
확인할 수 있도록 isinstance()함수를 제공
isinstance(인스턴스, 클래스)
인스턴스가 해당 클래스를 기반으로 만들어졌다면 True,
아니라면 False를 리턴
# 클래스를 선언 class Person: def __init__(self): pass # 사람을 선언 person = Person() print("isinstance(person, Person):", isinstance(person, Person))
단순한 인스턴스 확인
type(person) == Person
isinstance() 함수 활용하기
# 사람 클래스를 선언 class Person: def study(self): print("공부 시작") # 교수님 클래스 선언 class Professor: def teach(self): print("교육 시작") classroom = [Person(), Person(), Person(), Person(), Person()] for person in classroom: if isinstance(person, Person): person.study() elif isinstance(person, Person): person.teach()
특수한 이름의 메소드
Student 클래스를 기반으로 객체를 만들고 객체 뒤에
.(점)을 입력해서 내부의 함수를 확인할 수 있습니다.
형태
__<이름>__() 형태로 되어있으며
특수한 상황에 자동으로 호출되도록 만들어져 있습니다.
__str__()함수 정의하기
# 클래스 선언 class Person: def __init__(self, name, korean, math, english, science): self.name = name self.korean = korean self.math = english self.science = science def get_sum(self): return self.korean + self.math + self.english + self.science def get_average(self): return self.get_sum() / 4 def __str__(self): return "{}\t{}\t{}".format(self.name, self.get_sum(), self.get_average()) people = [ Person("이강현", 99, 90, 89, 90), Person("김강현", 98, 80, 80, 88), Person("박강현", 49, 95, 79, 80), Person("황강현", 92, 95, 89, 90) ] # 출력 print("이름", "총합", "평균", sep="\t") for person in people: print(str(person))
예외처리
# TypeError 발생시키기 class People: def __eq__(self, value): if not isinstance(value, Person): raise TypeError("Person 클래스의 인스턴스만 비교가 가능합니다.") return self.get_sum() == value.get_sum() person_a = Person("김현준", 90, 98, 80, 89) person_a == 10
클래스 변수와 메소드
클래스 변수
변수 만드는 방법
class 클래스 이름: 클래스 변수 = 값
클래스 변수에 접근하기
클래스 이름. 변수 이름
사람 수를 세는 Person.count라는 변수를 만들고 활용해보기
class Person: count = 0 def __init__(self, name, korean, math, english, science): self.name = name self.korean = korean self.math = math self.english = english self.science = science # 클래스 변수 설정 Person.count += 1 print("{}번 째 사람이 생성되었습니다.".format(Person.count)) # 사람 리스트 선언 people = [ Person("이강현", 99, 90, 89, 90), Person("김강현", 98, 80, 80, 88), Person("박강현", 49, 95, 79, 80), Person("황강현", 92, 95, 89, 90) ] print() print("현재 생성된 사람 수는 {}명 입니다.".format(Student.count))
일반적인 변수로 만드나
클래스 변수로 만드나 사용에 큰 차이는 없으나
‘클래스가 가진 기능’을 명시적으로 나타내서
변수를 만드는 것이 포인트
클래스함수
클래스 함수에는 앞에서 본적 있는
@로 시작되는 데코레이터가 있습니다.
[모듈 Flask에서 본 적 있습니다.]
간단히 다시 이야기 해보자면
데코레이터는 함수를 수정하지 않은 상태에서
추가 기능을 구현할 때 사용합니다.
클래스함수 만들기
class 클래스 이름: @classmethod def 클래스 함수(cls, 매개변수): pass
클래스 함수 호출하기
클래스 이름.함수 이름(매개변수)
학생 리스트를 아예 클래스 내부에 만들어 버리고
사람 리스트를 출력하기
# 클래스 선언 class Person: # 클래스 변수 count = 0 people = [] # 클래스 함수 @classmethod def print(cls): print("----- 사람 목록 -----") print("이름\t총점\t평균") for person in cls.people: print(str(person)) print("----- ----- -----") def __init__(self, name, korean, math, english, science): self.name = name self.korean = korean self.math = math self.english = english self.science = science Person.count += 1 Person.people.append(self) def get_sum(self): return self.korean + self.math + self.english + self.science def get_average(self): return self.get_sum() / 4 def __str__(self): return "{}\t{}\t{}".format(self.name, self.get_sum(), self.get_average()) Person("이강현", 99, 90, 89, 90) Person("김강현", 98, 80, 80, 88) Person("박강현", 49, 95, 79, 80) Person("황강현", 92, 95, 89, 90) Person("황성현", 92, 95, 89, 93) Person.print()