클래스 메소드
class Student(object):
'''
Student class
Author : sdk
Date : 2021.04.13
Description : Class, Static, Instance Method
'''
tuition_per = 1.0
def __init__(self, id, first_name, last_name, email , grade, tuition, gpa):
self._id = id
self._first_name = first_name
self._last_name = last_name
self._email = email
self._grade = grade
self._tuition = tuition
self._gpa =gpa
def full_name(self):
return '{} {}'.format(self._first_name, self._last_name)
def detail_info(self):
return 'Student Detail Info: {},{},{},{},{},{}'.format(self._id,self.full_name(), self._email, self._grade, self._tuition, self._gpa)
def get_fee(self):
return 'Before Tuition -> Id : {}. fee : {}'.format(self._id, self._tuition)
def get_fee_culc(self):
return 'After tuition -> Id : {}, fee : {}'.format(self._id, self._tuition * Student.tuition_per)
def __str__(self):
return 'Student Info -> name : {} grade : {} email : {}'.format(self.full_name(), self._grade, self._email)
@classmethod
def raise_fee(cls, per):
if per <= 1:
print('Please Enter 1 or More')
return
cls.tuition_per = per
print('Succed! tuition increased!')
@classmethod
def student_const(cls, id, first_name, last_name, email, grade, tuition, gpa):
return cls(id, first_name, last_name, email, grade, tuition * cls.tuition_per, gpa)
@staticmethod
def is_scholarship_st(inst):
if inst._gpa >= 4.3:
return '{} is a scholarship recipient.'.format(inst._last_name)
return 'Sorry. Not a scholarship recipient.'
student_1 = Student(1, 'kim', 'Sarang', 'student1@naver.com', '1', 400, 3.5)
student_2 = Student(2, 'Lee', 'Myungho', 'student2@naver.com', '2', 500, 4.3)
print(student_1)
print(student_2)
print()
print(student_1.detail_info())
print(student_2.detail_info())
print(student_1.get_fee())
print(student_2.get_fee())
print()
Student.raise_fee(1)
print(student_1.get_fee_culc())
print(student_2.get_fee_culc())
student_3 = Student.student_const(3, 'Park', 'Minji', 'student3@gmail.com', '3', 550, 4.5)
student_4 = Student.student_const(3, 'Cho', 'Sunghan', 'student4@gmail.com', '4', 600, 4.1)
print(student_3.detail_info())
print(student_4.detail_info())
print(student_3._tuition)
print(student_4._tuition)
print()
def is_scholarship(inst):
if inst._gpa >= 4.3:
return '{} is a scholarship recipient.'.format(inst._last_name)
return 'Sorry. Not a scholarship recipient.'
print(is_scholarship(student_1))
print(is_scholarship(student_2))
print(is_scholarship(student_3))
print(is_scholarship(student_4))
print()
print(Student.is_scholarship_st(student_1))
print(Student.is_scholarship_st(student_2))
print(Student.is_scholarship_st(student_3))
print(Student.is_scholarship_st(student_4))
print()
print(student_1.is_scholarship_st(student_1))
print(student_2.is_scholarship_st(student_2))
print(student_3.is_scholarship_st(student_3))
print(student_4.is_scholarship_st(student_4))
- 클래스 메소드를 사용하면 클래스 변수를 직접 바꾸지 않고 인자로 받아서 접근 할 수 있다. (아래 코드에 클래스 메소드 참조)
- 스태틱 메소드는 인자로 (inst)하나만 받는다. 클래스 메소드 처럼 인자를 cls,xxx,xxx 이렇게 안받아도 된다.
- 스태틱 메소드를 호출에서 쓰려면
print(student_1.is_scholarship_st(student_2))
이렇게 인자에 인스턴스를 넣어야 한다. 안넣으면 오류가 난다. 이유는 내용물에 inst._gpa가 있기 때문이다.
Class Method
@classmethod
def raise_fee(cls, per):
if per <= 1:
print('Please Enter 1 or More')
return
cls.tuition_per = per
print('Succed! tuition increased!')
# cls는 Student클래스와 같다.