μ½λ - ν¨μΊ μμ μ½λ μ°Έκ³ (ν¨μΊ μμ μ 리)
<μ΄μ κΈ>
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
μν€λ μ€
μ¨λΌμΈ μ± μ μ μ 곡μ νλ νλ«νΌ μλΉμ€
wikidocs.net
dir() λ΄μ₯ ν¨μλ μ΄λ€ κ°μ²΄λ₯Ό μΈμλ‘ λ£μ΄μ£Όλ©΄ ν΄λΉ κ°μ²΄κ° μ΄λ€ λ³μμ λ©μλ(method)λ₯Ό κ°μ§κ³ μλμ§ λμ΄ν΄ μ€λ€.
print(dir(studt1))
print(dir(studt2))
λ°λΌμ Studentμ κ°μ²΄ studt1, studt2λ₯Ό dir μΈμμ λ£μ΄μ λ³μμ λ©μλλ₯Ό νμΈν μ μλ€.
μΈμ€ν΄μ€ λ³μμ ν΄λμ€λ³μκΉμ§ λͺ¨λ λμ€λ κ²μ λ³Ό μ μλ€.
(2) __dict__
μν€λ μ€
μ¨λΌμΈ μ± μ μ μ 곡μ νλ νλ«νΌ μλΉμ€
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μ΄ λμ΄μλ€.