μ½”λ“œ - 패캠 μˆ˜μ—… μ½”λ“œ μ°Έκ³  (패캠 μˆ˜μ—… 정리)

 

<이전 κΈ€>

https://silvercoding.tistory.com/19

 

[python 심화] 2. 클래슀 기초, 클래슀 λ³€μˆ˜ , μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

μ½”λ“œ - 패캠 μˆ˜μ—… μ½”λ“œ μ°Έκ³  (패캠 μˆ˜μ—… 정리) <이전 κΈ€> https://silvercoding.tistory.com/18 [python 심화] 1. 객체지ν–₯(OOP), 클래슀 기초 μ‚¬μš© μ½”λ“œ - 패캠 μˆ˜μ—… μ½”λ“œ μ°Έκ³  1. 객체지ν–₯ vs μ ˆμ°¨μ§€ν–₯ κ°„λ‹¨ν•œ..

silvercoding.tistory.com

 

 

- 클래슀 ν™•μž₯ 

μ΄λ²ˆμ—λŠ” ν΄λž˜μŠ€μ— μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ, 클래슀 λ©”μ†Œλ“œ , μŠ€ν…Œμ΄ν‹± λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„μ„ ν•΄ λ³Έλ‹€. 

class Student(object):
    """
    Student Class
    Author : Kim
    Date : 2021. 6. 28 
    Description : Class, Static, Instance Method
    """

    # Class Variable
    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

    # Instance Method 
    def full_name(self):
        return "{}, {}".format(self._first_name, self._last_name)
    
    # Instance Method
    def detail_info(self):
        return 'Student Detail Info : {}, {}, {}, {}, {}, {}'.format(self._id, self.full_name(), self._email, self._grade, self._tuition, self._gpa)

    # Instance Method
    def get_fee(self):
        return 'Beforoe Tuition -> Id : {}, fee : {}'.format(self._id, self._tuition)

    # Instance Method
    def get_fee_culc(self):
        return 'After tuition -> Id : {}, fee : {}'.format(self._id, self._tuition * Student.tuition_per) 
    
    # Instance Method
    def __str__(self):
        return 'Student Info -> name : {} grade : {} email : {}'.format(self.full_name(), self._grade, self._email)
        
    # Class Method
    @classmethod
    def raise_fee(cls, per):
        if per <= 1:
            print('Please Enter 1 or More')
            return 
        Student.tuition_per = per
        print('Succeed! tuition increased.')

    # Class Method
    @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)

    # Static Method
    @staticmethod # ---> μš”μƒˆλŠ” 잘 쓰진 μ•ŠλŠ”λ‹€. 
    def is_scolarship_st(inst):
        if inst._gpa >= 4.3:
            return '{} is a scholarship recipient'.format(inst._last_name)
        return 'Sorry, Not a scholarship recipient'

Instance MethodλŠ” self의 μ ‘κ·Όμž(개개인, κ³ μœ ν•œ 객체)λ₯Ό μ΄μš©ν•˜μ—¬ 속성에 μ ‘κ·Όν•  수 μžˆλ‹€. 첫번째 μΈμžμ— selfκ°€ λ“€μ–΄κ°€λŠ” 것은 μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλΌκ³  생각을 ν•˜λ©΄ λœλ‹€. 

 

Class Method 첫번째 인자둜 클래슀λ₯Ό λ°›μ•„μ£Όμ–΄μ•Ό ν•œλ‹€. λŒ€λΆ€λΆ„ cls라고 μ“΄λ‹€. 또 , λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•˜κΈ° 전에 λ°μ½”λ ˆμ΄ν„°λ₯Ό μž‘μ„±ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€. (@classmethod) 클래슀 자체둜 μ ‘κ·Όν•  수 μžˆλ‹€. 

 

Static Method 일반 ν•¨μˆ˜μ˜ κΈ°λŠ₯을 ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€. 즉, 클래슀 μ•ˆμ— ꡳ이 넣지 μ•Šμ•„λ„ 되고 클래슀 λ°–μ—μ„œ 생성해도 λ˜λŠ” λ©”μ†Œλ“œμ΄λ‹€. κ·Έλž˜λ„ μœ„μ—μ²˜λŸΌ μž₯ν•™κΈˆ λ°›λŠ”μ§€μ— λŒ€ν•œ μ—¬λΆ€λŠ” studentν΄λž˜μŠ€μ™€ 연관이 λ˜μ–΄μžˆμœΌλ―€λ‘œ μ•ˆμ— μ¨μ£ΌλŠ” 것이 더 보기 νŽΈν•  것이닀. 

 

 

 

- μΈμŠ€ν„΄μŠ€ 생성 

student_1 = Student(1, 'Kim', "silver", 'student1@naver.com', '1', 400, 3.5)
student_2 = Student(2, 'Han', "golye", 'student2@daum.net', '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())

* ν•™λΉ„ 인상 (클래슀 λ©”μ†Œλ“œ μ‚¬μš©)

# ν•™λΉ„ 인상 (클래슀 λ©”μ†Œλ“œ λ―Έμ‚¬μš©) ---> μ΄λ ‡κ²Œ 직접 μ ‘κ·Όν•˜λŠ” κ±° 쒋지 μ•Šλ‹€. 
# Student.tuition_per = 1.2

# ν•™λΉ„ 인상 (클래슀 λ©”μ†Œλ“œ μ‚¬μš©) 
Student.raise_fee(1.2)

* 인상 μ‹œν‚¨ ν›„μ˜ ν•™λΉ„ 정보 

print(student_1.get_fee_culc())
print(student_2.get_fee_culc())

 

 

- 클래슀 λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μΈμŠ€ν„΄μŠ€ μƒμ„±ν•˜κΈ° 

student_3 = Student.student_const(3, 'Park', 'silver', 'Student3@gmail.com', '3', 550, 4.5)
student_4 = Student.student_const(4, 'Cho', 'golye', 'student4@gmail.com', '4', 600, 4.1)

Class Method둜 생성해 λ†“μ•˜λ˜ student_constλ₯Ό μ΄μš©ν•˜μ—¬ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 μˆ˜λ„ μžˆλ‹€.  

 

*** λ˜‘κ°™μ΄ μ‹€μŠ΅ 

# 전체 정보 
print(student_3.detail_info())
print(student_4.detail_info())
print()

# 학생 ν•™λΉ„ λ³€κ²½ 확인
print(student_3._tuition)
print(student_4._tuition)
print()

 

 

- Static Method λ₯Ό μ΄μš©ν•˜μ—¬ μž₯ν•™κΈˆ ν˜œνƒ μ—¬λΆ€ μ•Œμ•„λ³΄κΈ° 

(1) static method λ―Έμ‚¬μš© 

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))

μ΄λ ‡κ²Œ ν•¨μˆ˜μ— μΈμŠ€ν„΄μŠ€λ₯Ό λ„£μ–΄μ£Όλ©΄ μž₯ν•™κΈˆ λŒ€μƒ μ—¬λΆ€κ°€ λ°˜ν™˜λœλ‹€. 

 

(2) static method μ‚¬μš© 

Student 클래슀 μ•ˆμ— κ΅¬ν˜„ν•΄ 놓은 static method에 μ ‘κ·Όν•˜λŠ” 방법이닀. 

print(Student.is_scolarship_st(student_1))
print(Student.is_scolarship_st(student_2))
print(Student.is_scolarship_st(student_3))
print(Student.is_scolarship_st(student_4))


print(student_1.is_scolarship_st(student_1))
print(student_2.is_scolarship_st(student_2))
print(student_3.is_scolarship_st(student_3))
print(student_4.is_scolarship_st(student_4))

Student 클래슀 자체둜 접근이 κ°€λŠ₯ν•˜κ³ , 객체λ₯Ό ν†΅ν•œ μ ‘κ·Ό λ˜ν•œ κ°€λŠ₯ν•˜λ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts