ν΄λμ€
β’
κ°μ²΄
β’
ν΄λμ€
β¦
λ³μ
βͺ
μΈμ€ν΄μ€ λ³μ
βͺ
ν΄λμ€ λ³μ
β¦
λ©μλ
βͺ
μΈμ€ν΄μ€ λ©μλ
βͺ
ν΄λμ€ λ©μλ
βͺ
λ§€μ§ λ©μλ
β’
μμ±μ
β’
μλ©Έμ
βͺ
getter & setter
κ°μ²΄
μμ±κ³Ό κΈ°λ₯μ κ°μ§λ λμ
ν΄λμ€
κ°μ²΄λ₯Ό μ μνλ μ€κ³λ
ν΄λμ€ μ μΈ
class ν΄λμ€λͺ
:
ν΄λμ€ λ³μ = κ°
ν΄λμ€ λ΄μ© (μμ±μ, μλ©Έμ, λ©μλ, ...)
Python
볡μ¬
λ©μλ
ν΄λμ€ λ΄λΆμμ μ μν ν¨μ
def λ©μλλͺ
(self, λ§€κ°λ³μ1, λ§€κ°λ³μ2, ...):
μ€νλ¬Έ
Python
볡μ¬
μμ±μ
κ°μ²΄κ° μμ±λ λ μ€νλλ λ©μλ
def __init__(self, λ§€κ°λ³μ1, λ§€κ°λ³μ2, ...):
self.μΈμ€ν΄μ€λ³μ1 = λ§€κ°λ³μ1
self.μΈμ€ν΄μ€λ³μ2 = λ§€κ°λ³μ2
Python
볡μ¬
self
κ°μ²΄ μκΈ° μμ μ κ°λ¦¬ν€λ ν€μλ
super()
μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλ λ©μλ
κ°μ²΄ μμ±
λ³μλͺ
= κ°μ²΄μ΄λ¦( μΈμ1, μΈμ2, ... )
Python
볡μ¬
μλ©Έμ
κ°μ²΄κ° μλ©Έ(λ©λͺ¨λ¦¬μμ ν΄μ )λ λ μ€νλλ λ©μλ
def __del__(self):
μ€νλ¬Έ
Python
볡μ¬
μμ μ½λ
ν΄λμ€ μ μΈ
class ν΄λμ€λͺ
:
ν΄λμ€ λ΄μ©
# μμ±μ
# : κ°μ²΄κ° μμ±λ λ, μ€νλλ λ©μλ
def __init__(self, λ§€κ°λ³μ):
μμ±μ λ΄μ©
# self : κ°μ²΄ μμ μ κ°λ¦¬ν€λ ν€μλ(λμ
λ리)
# self.(λ³μ), self.(λ©μλ)
# μλ©Έμ
# : κ°μ²΄κ° μλ©Έλ λ, μ€νλλ λ©μλ
def __del__(self):
μλ©Έμ λ΄μ©
# λ©μλ
# : ν΄λμ€κ° μ μλ ν¨μ
def λ©μλλͺ
(self, λ§€κ°λ³μ):
λ©μλ λ΄μ©
Python
볡μ¬
κ°μ²΄ μμ±
κ°μ²΄ λ³μλͺ
= ν΄λμ€λͺ
( )
Python
볡μ¬
β’
ν΄λμ€λͺ
( ) --> μμ±μ ν¨μ
β’
μΈμ€ν΄μ€ : ν΄λμ€λ₯Ό ν΅νμ¬ μμ±λ κ°μ²΄
Person.py
# Person ν΄λμ€ μ μΈ
class Person:
# name = 'μ΄λ¦μμ'
# age = 0
# tel = '010-0000-0000'
# μμ±μ
# νμ΄μ¬μμλ μμ±μλ μ¬λ¬ κ° μ μν μ μλ€.(μ€λ²λ‘λ©X)
# def __init__(self):
# print('Person κ°μ²΄ μμ±...')
# μμ±μ
# - μ μν μμ±μμ λ§€κ°λ³μμ λν΄νΈλ§€κ°λ³μλ₯Ό μ€μ νμ¬ μ€λ²λ‘λ©μ²λΌ ꡬννλ€
def __init__(self=None, name=None, age=None, tel=None):
self.name = name
self.age = age
self.tel = tel
print('Person κ°μ²΄ μμ±...')
# μλ©Έμ
def __del__(self):
print('Person κ°μ²΄ μλ©Έ...')
# λ©μλ
def show_info(self):
print('μ΄λ¦ : {}, λμ΄ : {}, μ νλ²νΈ : {}'.format(self.name, self.age, self.tel))
# Person κ°μ²΄ μμ±
person = Person()
# κ°μ²΄μ λ³μ μ κ·Ό
person.name = 'λ§λμ'
person.age = 20
person.tel = '010-1234-1234'
print('μ΄λ¦ :', person.name)
print('λμ΄ :', person.age)
print('μ νλ²νΈ :', person.tel)
person2 = Person('μμꡬ', 20, '010-1111-2222')
print( person2.name )
print( person2.age )
print( person2.tel )
person3 = Person('μ‘°μΉμ°', 30, '010-0000-0000')
person3.show_info()
Python
볡μ¬
Student.py
class Student:
def __init__(self, no, name, major):
self.no = no
self.name = name
self.major = major
# νΉμν μ΄λ¦μ λ©μλ
# __(μ΄λ¦)__ ννμ νΉμν μ΄λ¦μ λ©μλλ€μ΄ μλ€.
# : 미리 μ μλ μ΄λ¦μ΄λ©°, νΉμν μν©ν΄μ νΈμΆλλλ‘ μ μλμ΄μλ€.
# __str__ : str(κ°μ²΄) ν¨μλ₯Ό νΈμΆν λ, μλμΌλ‘ μ€νλλ λ©μλ
def __str__(self):
return '{} / {} / {}'.format(self.no, self.name, self.major)
# __eq__, __ne__ λ±μ λ©μλλ₯Ό μ μνμ§ μμΌλ©΄,
# ==, != μ체λ μΈμ€ν΄μ€λ₯Ό λΉκ΅ν©λλ€.
# κ°μ²΄μ μ λ³΄κ° κ°μμ§ νμΈνλ λ©μλ
def __eq__(self, obj):
return self.no == obj.no
# κ°μ²΄μ μ λ³΄κ° λ€λ₯Έμ§ νμΈνλ λ©μλ
def __ne__(self, obj):
return self.no != obj.no
# κ°μ²΄ 리μ€νΈ
students = [
Student(101, 'νμ±νΈ', 'μ»΄ν¨ν°κ³΅νκ³Ό'),
Student(102, 'μ΄ν¨λ¦¬', 'λ°©μ‘μ°μκ³Ό'),
Student(103, 'μμꡬ', 'μ°κ·Ήμνκ³Ό'),
Student(101, 'νμ±νΈ', 'μ»΄ν¨ν°κ³΅νκ³Ό'),
]
for student in students:
# str(κ°μ²΄) : ν΄λΉ κ°μ²΄μ __str__ λ©μλλ₯Ό νΈμΆνλ λ©μλ
print( str(student) )
# == κΈ°νΈλ₯Ό μ΄μ©νμ¬ λ κ°μ²΄λ₯Ό λΉκ΅νλ©΄,
# ν΄λΉ κ°μ²΄μ __eq__ λ©μλκ° νΈμΆλλ€.
print( students[0] == students[1] )
print( students[0] == students[3] )
# != κΈ°νΈλ₯Ό μ΄μ©νμ¬ λ κ°μ²΄λ₯Ό λΉκ΅νλ©΄,
# ν΄λΉ κ°μ²΄μ __ne__ λ©μλκ° νΈμΆλλ€.
print( students[0] != students[1] )
print( students[0] != students[3] )
s1 = Student(101, 'ALOHA', 'μ»΄ν¨ν°κ³΅νκ³Ό')
s2 = Student(101, 'ALOHA', 'μ»΄ν¨ν°κ³΅νκ³Ό')
print( s1 == s2 )
Python
볡μ¬
ν΄λμ€ λ©μλ
λ°μ½λ μ΄ν°
@μ΄λ¦ : λ°μ½λ μ΄ν°, ν΄λΉ ν΄λμ€λ λ©μλμ κΈ°λ₯/μ©λλ₯Ό λͺ
μ
ν΄λμ€ λ©μλ
@classmethod : ν΄λΉ λ©μλλ₯Ό ν΄λμ€ λ©μλλ‘ λͺ
μ
β’
ν΄λμ€ λ©μλμ 첫λ²μ§Έ λ§€κ°λ³μλ‘ ν΄λμ€(cls)λ₯Ό λ°μμ¨λ€.
β’
μΈμ€ν΄μ€ λ©μλμ 첫λ²μ§Έ λ§€κ°λ³μλ μΈμ€ν΄μ€(self)λ₯Ό λ°μμ¨λ€.
class ν΄λμ€λͺ
:
# ν΄λμ€ λ³μ
ν΄λμ€λ³μλͺ
= κ°
# ν΄λμ€ λ©μλ
@classmethod
def λ©μλλͺ
(cls):
λ©μλ λ΄μ©
# cls : ν΄λμ€
ν΄λμ€ λ³μμ μ κ·Ό
- ν΄λμ€λͺ
.λ³μλͺ
Python
볡μ¬
Student.py
class Student:
# name = '' # κΈ°λ³Έκ° μ΄κΈ°ν
#age = 0
#tel = ''
# ν΄λμ€ λ³μ - κ°μ²΄κ°μ 곡μ ν κ°μ μ¬μ©νλ λ³μ
count = 0
student_list = []
def __init__(self, name, age, tel):
# μΈμ€ν΄μ€ λ³μ - κ°μ²΄ λ³λ‘ λ€λ₯΄κ² μ¬μ©ν λ³μ
self.name = name
self.age = age
self.tel = tel
Student.count += 1
Student.student_list.append(self)
def __str__(self):
return '{} / {} / {}'.format(self.name, self.age, self.tel)
# ν΄λμ€ λ©μλ
# @μ΄λ¦ : λ°μ½λ μ΄ν°, ν΄λΉ ν΄λμ€λ λ©μλμ κΈ°λ₯/μ©λλ₯Ό λͺ
μνλ μν
# @classmethod : ν΄λΉ λ©μλλ₯Ό ν΄λμ€ λ©μλλ‘ λͺ
μ
# ν΄λμ€ λ©μλμ 첫λ²μ§Έ λ§€κ°λ³μλ‘ ν΄λμ€(cls)λ₯Ό λ°μμ¨λ€.
# μΈμ€ν΄μ€ λ©μλμ 첫λ²μ§Έ λ§€κ°λ³μλ μΈμ€ν΄μ€(self)λ₯Ό λ°μμ¨λ€.
@classmethod
def show_info(cls):
for student in cls.student_list:
print( str(student) )
s1 = Student('κΉν΄λ¨Ό', 20, '010-1111-2222')
s2 = Student('μ΄ν¨λ¦¬', 30, '010-1111-2222')
s3 = Student('μμꡬ', 40, '010-1111-2222')
print('{} λͺ
μ νμμ΄ μ°Έμ¬νμμ΅λλ€'.format( Student.count ))
print( Student.show_info() )
Python
볡μ¬
getter & setter
β’
getter
λ³μμ κ°λ₯Ό κ°μ Έμ€λ λ©μλ
β’
setter
λ³μμ κ°μ μ§μ νλ λ©μλ
β’
κΈ°λ³Έ getter, setter
# getter, setter
# - getter : λ³μμ κ°λ₯Ό κ°μ Έμ€λ λ©μλ
# - setter : λ³μμ κ°μ μ§μ νλ λ©μλ
class Person:
# getter
def get_name(self):
return self.name
# setter
def set_name(self, value):
self.name = value
p = Person()
p.set_name('ALOHA')
print('p - name : {}'.format( p.get_name() ))
Python
볡μ¬
β’
λ°μ½λ μ΄ν°λ₯Ό μ΄μ©ν getter, setter μ μ
# λ°μ½λ μ΄ν°λ₯Ό μ΄μ©ν getter, setter μ μ
class Person:
# @property : ν΄λΉ λ³μλ₯Ό λ°μ½λ μ΄ν° κΈ°λ₯μ μ¬μ©ν μ μλλ‘ μ§μ
# - νλμ μν μ κΈ°λ₯μΈ setter, getter λ‘ μ¬μ©κ°λ₯
# - @property λ‘ μ§μ ν λ³μλ __λ³μ μκ°μ ννλ‘ μ¬μ©
@property
def name(self):
return self.__name
# @λ³μ.setter : ν΄λΉ λ©μλλ₯Ό setter λ©μλλ‘ μ§μ
# - (κ°μ²΄.λ³μ = κ°) λ¬Έμ₯μ€ν μ,--> μ§μ ν setter λ©μλκ° μ€ν
@name.setter
def name(self, value):
self.__name = value
print('setter λ©μλ νΈμΆ...')
# @λ³μ.getter : ν΄λΉ λ©μλλ₯Ό getter λ©μλλ‘ μ§μ
# - (κ°μ²΄.λ³μ) λ¬Έμ₯μ€ν μ,--> μ§μ ν getter λ©μλκ° μ€ν
@name.getter
def name(self):
print('getter λ©μλ νΈμΆ...')
return self.__name
p = Person()
p.name = 'ALOHA'
print('p - name : {}'.format( p.name ))
Python
볡μ¬
Circle.py
import math
class Circle:
@property
def radius(self):
return self.__radius
@radius.setter
def radius(self, value):
if value <= 0 :
print('λ°μ§λ¦μ μμμ΄μ΄μΌν©λλ€.')
self.__radius = 0
return
self.__radius = value
@radius.getter
def radius(self):
return self.__radius
circle = Circle()
circle.radius = -10
print('circle - radius : {}'.format( circle.radius ))
Python
볡μ¬
ν΄λμ€
κ°μ²΄λ₯Ό μ μνλ μ€κ³λ
class ν΄λμ€λͺ
:
# ν΄λμ€ λ³μ
λ³μλͺ
= κ°
# μμ±μ
def __init__(self):
# μΈμ€ν΄μ€ λ³μ
self.λ³μλͺ
= κ°
# μΈμ€ν΄μ€ λ©μλ
def λ©μλλͺ
(self):
# λ©μλ λ΄μ©
pass
# ν΄λμ€ λ©μλ
@classmethod
def ν΄λμ€λ©μλ(cls):
# λ©μλ λ΄μ©
pass
# κ°μ²΄ μμ±
κ°μ²΄λͺ
= ν΄λμ€λͺ
()
# λ©μλ νΈμΆ
κ°μ²΄λͺ
.λ©μλλͺ
()
Python
볡μ¬
λ³μ
β’
μΈμ€ν΄μ€ λ³μ
β’
ν΄λμ€ λ³μ
μΈμ€ν΄μ€ λ³μ
κ°μ²΄λ§λ€ λ
립μ μΌλ‘ κ°μ§λ λ³μ
β’
self.λ³μλͺ
ννλ‘ μ μ
β’
κ°μ²΄ μμ± ν μ¬μ© κ°λ₯
class Person:
def __init__(self):
self.name = "νκΈΈλ" # μΈμ€ν΄μ€ λ³μ
self.age = 20 # μΈμ€ν΄μ€ λ³μ
# κ°μ²΄ μμ±
p1 = Person()
p2 = Person()
# κ° κ°μ²΄μ μΈμ€ν΄μ€ λ³μλ λ
립μ
p1.name = "κΉμ² μ"
print(p1.name) # "κΉμ² μ" μΆλ ₯
print(p2.name) # "νκΈΈλ" μΆλ ₯
Python
볡μ¬
ν΄λμ€ λ³μ
ν΄λμ€ λ΄λΆμμ μ μΈλ λ³μλ‘, λͺ¨λ κ°μ²΄κ° 곡μ νλ λ³μ
β’
ν΄λμ€ λ΄λΆμμ μ§μ μ μΈ
β’
ν΄λμ€λͺ
.λ³μλͺ
ννλ‘ μ κ·Ό
class Student:
count = 0 # ν΄λμ€ λ³μ
def __init__(self):
Student.count += 1 # ν΄λμ€ λ³μ μ κ·Ό
# κ°μ²΄ μμ±
s1 = Student()
s2 = Student()
print(Student.count) # 2 μΆλ ₯ (λͺ¨λ κ°μ²΄κ° 곡μ )
Python
볡μ¬
λ©μλ
β’
μΈμ€ν΄μ€ λ©μλ
β’
ν΄λμ€ λ©μλ
β’
λ§€μ§ λ©μλ
β¦
μμ±μ
β¦
μλ©Έμ
β’
getter & setter
μΈμ€ν΄μ€ λ©μλ
κ°μ²΄μ κ°λ³μ μΈ λμμ μ μνλ λ©μλ
β’
첫 λ²μ§Έ λ§€κ°λ³μλ‘ self λ₯Ό λ°μ
β’
κ°μ²΄λ₯Ό ν΅ν΄ νΈμΆ
class Person:
def say_hello(self): # μΈμ€ν΄μ€ λ©μλ
print(f"μλ
νμΈμ, {self.name}μ
λλ€.")
person = Person()
person.name = "νκΈΈλ"
person.say_hello() # "μλ
νμΈμ, νκΈΈλμ
λλ€." μΆλ ₯
Python
볡μ¬
ν΄λμ€ λ©μλ
ν΄λμ€ μ 체μ μν₯μ λ―ΈμΉλ κΈ°λ₯μ μ μνλ λ©μλ
β’
@classmethod λ°μ½λ μ΄ν° μ¬μ©
β’
첫 λ²μ§Έ λ§€κ°λ³μλ‘ cls λ₯Ό λ°μ
class Student:
count = 0
@classmethod
def get_total_students(cls): # ν΄λμ€ λ©μλ
return cls.count
print(Student.get_total_students()) # ν΄λμ€λ₯Ό ν΅ν΄ μ§μ νΈμΆ
Python
볡μ¬
λ§€μ§ λ©μλ
νμ΄μ¬μμ νΉλ³ν μ©λλ‘ λ―Έλ¦¬ μ μν΄λ λ©μλ
λ©μλ | μ€λͺ
|
__init__(self) | μμ±μ: κ°μ²΄ μμ± μ μλμΌλ‘ νΈμΆ |
__del__(self) | μλ©Έμ: κ°μ²΄κ° μμ λ λ νΈμΆ |
__str__(self) | κ°μ²΄λ₯Ό λ¬Έμμ΄λ‘ ννν λ νΈμΆ |
__len__(self) | κ°μ²΄μ κΈΈμ΄λ₯Ό λ°νν λ νΈμΆ |
__add__(self, other) | + μ°μ°μ λμ μ μ |
__eq__(self, other) | == μ°μ°μ λμ μ μ |
__ne__(self, other) | != μ°μ°μ λμ μ μ |
class Book:
def __init__(self, title): # μμ±μ
self.title = title
def __str__(self): # λ¬Έμμ΄ νν
return f"μ±
μ λͺ©: {self.title}"
def __del__(self): # μλ©Έμ
print(f"{self.title} κ°μ²΄κ° μμ λ¨")
Python
볡μ¬
getter & setter
κ°μ²΄μ μμ±μ μμ νκ² μ κ·Όνκ³ μμ νκΈ° μν λ©μλ
β’
getter: μμ±κ°μ λ°ννλ λ©μλ
β’
setter: μμ±κ°μ μ€μ νλ λ©μλ
class Person:
def __init__(self):
self.__name = "" # private λ³μ
@property # getter
def name(self):
return self.__name
@name.setter # setter
def name(self, value):
if len(value) > 0:
self.__name = value
else:
print("μ΄λ¦μ λΉμ΄μμ μ μμ΅λλ€.")
person = Person()
person.name = "νκΈΈλ" # setter νΈμΆ
print(person.name) # getter νΈμΆ
Python
볡μ¬