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

 

<이전 κΈ€>

https://silvercoding.tistory.com/18

 

[python 심화] 1. 객체지ν–₯(OOP), 클래슀 기초 μ‚¬μš©

μ½”λ“œ - 패캠 μˆ˜μ—… μ½”λ“œ μ°Έκ³  1. 객체지ν–₯ vs μ ˆμ°¨μ§€ν–₯ κ°„λ‹¨ν•œ 비ꡐ νŒŒμ΄μ¬μ€ OOP (객체지ν–₯) 언어이닀.  객체지ν–₯κ³Ό μ ˆμ°¨μ§€ν–₯은 λ•Œμ— 따라 μž₯점과 단점이 μžˆλ‹€. 객체지ν–₯을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ 재

silvercoding.tistory.com

 

 

 

클래슀 ν™•μž₯ 

Student ν΄λž˜μŠ€μ— 클래슀 λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜μ—¬ 이에 λŒ€ν•œ κ°œλ…μ„ 이해 ν•΄λ³΄μž.

- 클래슀 생성 

class Student():
    """
    Student Class
    Author : silver
    Date : 2021. 06. 30 
    """

    # 클래슀 λ³€μˆ˜ 
    student_count = 0 

    def __init__(self, name, number, grade, details, email=None):
        # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
        self._name = name
        self._number = number
        self._grade = grade
        self._details = details
        self._email = email

        Student.student_count += 1 

    def __str__(self):
        return 'str {}'.format(self._name)

    def __repr__(self):
        return 'repr {}'.format(self._name)

    def detail_info(self):
        print('Current Id : {}'.format(id(self)))
        print('Student Detail Info : {} {} {}'.format(self._name, self._email, self._details))

    def __del__(self):
        Student.student_count -= 1 

μš°μ„  클래슀λ₯Ό 생성해 μ€€λ‹€. μ£Όμ„μœΌλ‘œ 클래슀 λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό ꡬ뢄해 λ†“μ•˜λ‹€. 

λ§κ·ΈλŒ€λ‘œ 클래슀 λ³€μˆ˜λŠ” 클래슀 μžμ²΄μ—μ„œ 접근이 κ°€λŠ₯ν•œ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μƒμ„±λœ μΈμŠ€ν„΄μŠ€λ‘œ 접근이 κ°€λŠ₯ν•œ λ³€μˆ˜μ΄λ‹€. λ”°λΌμ„œ 클래슀 μ•ˆμ— student_count 클래슀 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , μƒμ„±μž λ©”μ„œλ“œμ—μ„œ μ“΄ 것과 같이 Student.student_count += 1 처럼 클래슀둜 μ ‘κ·Όν•˜μ—¬ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” selfκ°€ λΆ™μ–΄ μžˆλ‹€. 객체λ₯Ό ν†΅ν•˜μ—¬ 접근이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

 

 

- 객체 생성 

studt1 = Student('Cho', 2, 3, {'gender': 'Male', 'score1': 65, 'score2': 44})
studt2 = Student('chang', 4, 1, {'gender': 'Female', 'score1': 85, 'score2': 74}, "onestein@google.com")

 λ‘ 개의 객체λ₯Ό 생성해 μ€€λ‹€. 

 

 

- id 확인 

print(id(studt1))
print(id(studt2))

 

 

*** == , is 의 차이 

== : 값을 비ꡐ 

print(studt1._name == studt2._name)

is : id 값을 비ꡐ 

print(studt1 is studt2)

 

 

- dir & __dict__ & __doc__

(1) λ‚΄μž₯ν•¨μˆ˜ dir 

https://wikidocs.net/10307

 

μœ„ν‚€λ…μŠ€

온라인 책을 μ œμž‘ κ³΅μœ ν•˜λŠ” ν”Œλž«νΌ μ„œλΉ„μŠ€

wikidocs.net

dir() λ‚΄μž₯ ν•¨μˆ˜λŠ” μ–΄λ–€ 객체λ₯Ό 인자둜 λ„£μ–΄μ£Όλ©΄ ν•΄λ‹Ή 객체가 μ–΄λ–€ λ³€μˆ˜μ™€ λ©”μ†Œλ“œ(method)λ₯Ό 가지고 μžˆλŠ”μ§€ λ‚˜μ—΄ν•΄ μ€€λ‹€. 

print(dir(studt1))
print(dir(studt2))

λ”°λΌμ„œ Student의 객체 studt1, studt2λ₯Ό dir μΈμžμ— λ„£μ–΄μ„œ λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό 확인할 수 μžˆλ‹€. 

 

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ ν΄λž˜μŠ€λ³€μˆ˜κΉŒμ§€ λͺ¨λ‘ λ‚˜μ˜€λŠ” 것을 λ³Ό 수 μžˆλ‹€. 

 

 

(2) __dict__ 

https://wikidocs.net/1743

 

μœ„ν‚€λ…μŠ€

온라인 책을 μ œμž‘ κ³΅μœ ν•˜λŠ” ν”Œλž«νΌ μ„œλΉ„μŠ€

wikidocs.net

클래슀 λ˜λŠ” μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό ν™•μΈν•œλ‹€. 

print(studt1.__dict__)
print(studt2.__dict__)

μ΄λ ‡κ²Œ dictionary ꡬ쑰둜 λ‚˜μ˜€κ²Œ λœλ‹€. 

 

 

 

(3) __doc__ 

print(Student.__doc__)

__doc__ 클래슀 μ•ˆμ—μžˆλŠ” μ„€λͺ… 주석을 보여쀀닀. 

 

 

 

- λ©”μ†Œλ“œ 싀행해보기 

# μΈμŠ€ν„΄μŠ€λ‘œ μ ‘κ·Ό 
studt1.detail_info()
studt2.detail_info()


# Student.detail_info() ---> μ—λŸ¬ 남 


# 클래슀둜 μ ‘κ·Ό
Student.detail_info(studt1)
Student.detail_info(studt2)

μΈμŠ€ν„΄μŠ€λ‘œ μ ‘κ·Όν•˜λŠ” 것이 일반적인 방법이고, ν΄λž˜μŠ€λ‘œλ„ μ ‘κ·Όν•  수 μžˆλ‹€. 클래슀둜 μ ‘κ·Όν•˜λ©΄ μΈμžμ— 객체λ₯Ό λ„£μ–΄μ£Όμ–΄μ•Ό ν•œλ‹€. selfλ₯Ό μ±„μ›Œμ£Όμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

 

 

 

- __class__ 

print(studt1.__class__, studt2.__class__)
print(id(studt1.__class__) == id(studt2.__class__))

Student 클래슀λ₯Ό λ°˜ν™˜ν•œλ‹€. κ°μ²΄λŠ” 각각 λ‹€λ₯Έ id값을 κ°€μ§€μ§€λ§Œ, ν΄λž˜μŠ€λŠ” 같은 id값을 가지고 μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€. (λ‹Ήμ—°ν•œ μ†Œλ¦¬) 

 

 

 

- μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 클래슀 λ³€μˆ˜μ˜ μ ‘κ·Ό 

(1) μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ ‘κ·Ό

print(studt1._name, studt2._name)
print(studt1._email, studt2._email)

μ΄λ ‡κ²Œ μΈμŠ€ν„΄μŠ€λ₯Ό ν†΅ν•˜μ—¬ μ ‘κ·Όν•  수 μžˆλ‹€. 

studt1._name = "Lee" 이런 μ‹μœΌλ‘œ 직접 μ ‘κ·ΌμœΌλ‘œ 값을 λ°”κΎΈλŠ” μ½”λ“œλŠ” λ¬Έλ²•μ μœΌλ‘œ ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•œλ‹€. 

 

 

 

(2) 클래슀 λ³€μˆ˜ μ ‘κ·Ό 

print(studt1.student_count)
print(studt2.student_count)
print(Student.student_count)

클래슀 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€λ‘œλ„ , 클래슀 μžμ²΄λ‘œλ„ 접근이 κ°€λŠ₯ν•˜λ‹€. μΈμŠ€ν„΄μŠ€λ‘œ 접근을 ν•  λ•Œμ—λŠ” μΈμŠ€ν„΄μŠ€ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ—†μœΌλ©΄ μƒμœ„(클래슀) μ—μ„œ κ²€μƒ‰ν•œλ‹€. μΈμŠ€ν„΄μŠ€ 검색 -> μƒμœ„ 검색 (클래슀, λΆ€λͺ¨ 클래슀) μˆœμ„œμ΄κΈ° λ•Œλ¬Έμ— λ™μΌν•œ μ΄λ¦„μœΌλ‘œ λ³€μˆ˜ 생성도 κ°€λŠ₯ν•˜λ‹€. 

 

 

 

- __del__ 호좜

del studt2

print(studt1.student_count)
print(Student.student_count)

__del__ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν–ˆμ„ λ•Œ student_count도 쀄어듀도둝 λ§Œλ“€μ—ˆμœΌλ―€λ‘œ 좜λ ₯ν•΄ 보면 1이 λ˜μ–΄μžˆλ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts