Python

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()
클래스함수

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다