κΈ°λ³Έ μ μ
κ°μ²΄?
μμ±(μν =state, value, attribute)+νλ(λμ,μλ =behavior, method)
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP: object-oriented programming)
μ°λ¦¬κ° μ΄κ³ μλ μ€μ μΈκ³κ° κ°μ²΄(object)λ€λ‘ ꡬμ±λμ΄ μλ κ²κ³Ό κ°μ΄ μννΈμ¨μ΄λ κ°μ²΄ κ°λ μ μ μ©μν€λ κΈ°λ²
μ»΄ν¨ν° νλ‘κ·Έλ¨μΌλ‘ ν΄κ²°ν΄μΌνλ λ¬Έμ λ₯Ό μ€μ μΈμμμ μ²λΌ λ€μν μ 보λ€μ κ°μ§ κ°μ²΄λ€λ‘ νννκ³ , κ·Έ κ°μ²΄λ€κ° ν΅μ μΌλ‘ ν΄κ²°νλ€.
νμ΄μ¬μ κ°μ²΄λ‘ ꡬμ±λμ΄μκ³ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κ°λ₯νκ²νλ μΈμ΄μ΄λ©΄μ, κ°μ²΄μ§ν₯νλ‘κ·Έλλ°μ κ°μ νμ§ μλ νλ‘κ·Έλλ° μΈμ΄μ΄λ€.
μΈμ€ν΄μ€ λ³μμ λ©μλ
κ°μ²΄ = νλ + λ©μλ
ν΄λμ€?
κ°μ²΄μ λν μ€κ³λλ₯Ό ν΄λμ€(class)λΌκ³ νλ€.
ν΄λμ€λ‘λΆν° λ§λ€μ΄μ§λ κ°κ°μ κ°μ²΄λ₯Ό κ·Έ ν΄λμ€μ μΈμ€ν΄μ€(instance)λΌκ³ νλ€.
ex. ν΄λμ€ = λΆμ΄λΉ΅ ν, κ°μ²΄ = λΆμ΄λΉ΅
μΊ‘μν(encapsulation)?
λ°μ΄ν°μ μκ³ λ¦¬μ¦μ νλλ‘ λ¬Άλλ€.
κ³΅μ© μΈν°νμ΄μ€λ§ μ 곡νκ³ κ΅¬ν μΈλΆ μ¬νμ κ°μΆλ κ²μ΄λ€.
μμ±μ(constructor)?
κ°μ²΄κ° μμ±λ λ κ°μ²΄λ₯Ό κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°ννλ νΉμν λ©μλμ΄λ€.
μ 보 μλ
ꡬνμ μΈλΆ μ¬νμ ν΄λμ€ μμ κ°μΆλ κ²
λ³μλ κ°μΆκ³ , μΈλΆμμλ λ©μλλ€λ§ μ¬μ©νλλ‘ νλ κ²
μ κ·Όμμ μ€μ μ
νλλ μΈμ€ν΄μ€ λ³μκ°μ λ°ννλ μ κ·Όμ(getters)μ΄κ³ , λ νλλ μΈμ€ν΄μ€ λ³μκ°μ μ€μ νλ μ€μ μ(setters)μ΄λ€.
μ μ λ³μ
μ΄λ€ λ³μλ λͺ¨λ κ°μ²΄λ₯Ό ν΅νμ΄μ νλλ§ μμ±λκ³ λͺ¨λ κ°μ²΄κ° μ΄κ²μ 곡μ νκ² λλ€.
μ΄λ¬ν λ³μλ₯Ό μ μ λ©€λ² λλ ν΄λμ€ λ©€λ²(class member)λΌκ³ νλ€.
ν΄λμ€(class)
μ¬λ¬ κ°μ ν¨μμ μλ£λ₯Ό λ¬Άμ΄μ κ°μ²΄ μμ± λꡬ
ꡬμ±μμ : λ©μλ(ν¨μ) + λ³μ(μλ£) + μμ±μ(κ°μ²΄ μμ±)
λ©€λ²(member) : λ©€λ²λ©μλ, λ©€λ²λ³μ
μ ν
1) μ¬μ©μμ μν΄λμ€ : μ¬μ©μκ° ν΄λμ€ μμ±
2) λͺ¨λ ν΄λμ€ : νμ΄μ¬μ μ 곡 ν΄λμ€
νμ)
class ν΄λμ€λͺ
:
λ©€λ²λ³μ = μλ£
def λ©€λ²λ©μλ() :
λͺ
λ Ήλ¬Έ
μμ±μ : κ°μ²΄ μμ±
1. μ€μ²©ν¨μ
def calc_fn(a, b) : # outer
#data μμ±
x = a # x = 10
y = b # y = 20
#inner : data μ‘°μ/μ²λ¦¬
def plus() : #λ§μ
p = x + y
return p
def minus() : #λΊμ
m = x - y
return m
return plus, minus
ν¨μ νΈμΆ
plus, minus = calc_fn(10, 20)
print('plus = ', plus()) #plus = 30
print('minus =', minus()) #minus = -10
2. ν΄λμ€ : μ€μ²©ν¨μ -> ν΄λμ€ λ³κ²½
class calc_class :
#λ©€λ²λ³μ(μ μλ³μ) : μλ£ μμ±
x = 0
y = 0
#μμ±μ : κ°μ²΄ μμ± + λ©€λ²λ³μ μ΄κΈ°ν. ν¨μ νμμ΄μ§λ§ κ³ μ μ΄λ¦μ κ°μ§κ³ μμ
def __init__(self, a, b) :
self.x = a #10
self.y = b #20
#λ©€λ²λ©μλ(ν¨μ) : μλ£ μ²λ¦¬
def plus(self) : #self : λ©€λ²μ κ·Ό(νΈμΆ)
p = self.x + self.y
return p
def minus(self) : #λΊμ
m = self.x - self.y
return m
첫λ²μ§Έ κ°μ²΄ μμ±
* objλΌλ κ°μ²΄ μμ x=10, y=20, plus, minus λ©€λ²λ€λ‘ ꡬμ±λμ΄ μμ
obj = calc_class(10, 20) # μμ±μ νΈμΆ -> object μμ±
type(obj) # __main__.calc_class
id(obj)
object.member(λ©€λ²λ³μ + λ©€λ²λ©μλ)
print('x = ', obj.x) # x = 10
print('y = ', obj.y) # y = 20
print('plus = ', obj.plus()) # plus = 30
print('minus = ', obj.minus()) # minus = -10
λλ²μ§Έ κ°μ²΄ μμ±
obj2 = calc_class(100, 200) #μμ±μ νΈμΆ -> object μμ±
print('x = ', obj2.x) #x = 100
print('y = ', obj2.y) #y = 200
print('plus = ', obj2.plus()) #plus = 300
print('minus = ', obj2.minus()) #minus = -100
type(obj2) #__main__.calc_class
id(obj2)
λͺ¨λ ν΄λμ€ * λͺ¨λ : ν¨μμ ν΄λμ€λ₯Ό ν¬ν¨ν νμ΄μ¬ νμΌ (*.py)
νμ΄μ¬μμ μ 곡νλ ν΄λμ€
μ ν
1) builtins λͺ¨λ ν΄λμ€ : λ΄μ₯ ν΄λμ€. importκ³Όμ μ΄ νμ μμ
2) import λͺ¨λ ν΄λμ€ : μ¬μ©μκ° μ§μ κ°μ Έ μ¨ ν΄λμ€
1. builtins λͺ¨λ ν΄λμ€
import builtins
dir(builtins) #ν¨μμ ν΄λμ€ λͺ©λ‘
1) μλ£κ΅¬μ‘° κ΄λ ¨
list()
lst = list(range(10)) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#listλΌλ ν΄λμ€λ‘ lstλΌλ κ°μ²΄λ₯Ό λ§λ¦
tuple()
t = tuple(lst)
t #(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
set()
s = set(lst)
s #{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
dict()
d = dict({'name' : 'hong', 'age' : 35})
d #{'name': 'hong', 'age': 35}
2) μλ£ν λ³ν
int(25.5) #25
float(25) #25.0
str(10) + 'λ' #10λ
bool(1) #True : 0μ΄ μλ λͺ¨λ μ€μλ₯Ό Trueλ‘ λ°ν
bool(0) #False
3) κΈ°ν
range(1, 11) #0λΆν° 11μ리μ μ«μ μμ±
type(lst) #objectμ μΆμ²(=class)
2. import λͺ¨λ ν΄λμ€
from datetime import date #from λͺ¨λ import ν΄λμ€
* dateμλ¦¬κ° ν¨μμΈμ§ ν΄λμ€μΈμ§ Ctrl + ν΄λ¦νμ¬ μμ€ νμΈ
today = date(2021, 10, 28) #dateμμ±μ : μ μν ν΄λμ€() -> todayκ°μ²΄
#object.meber(λ©€λ²λ³μ + λ©€λ²λ©μλ)
κ°μ²΄μ νΈμΆ κ°λ₯ν λ©€λ² νμΈ
dir(today)
object.λ©€λ²λ³μ
today.year #2021
today.month #10
today.day #28
object.λ©€λ²λ©μλ()
week = today.weekday() #κΈ°λ₯. weekday : 0(μ) ~ 6(μΌ)μ¬μ΄μ μ«μ λ°ν
print('μμΌ μ 보 : ', week) #μμΌ μ 보 : 3
λμ λ©€λ² λ³μ μμ± - Car
μμ±μ λλ λ©μλμμ λμμΌλ‘ λ©€λ² λ³μ μμ±
self : μμ (νμ¬ ν΄λμ€)μ λ©€λ²λ₯Ό νΈμΆνλ κ°μ²΄
self.λ©€λ²λ³μ
self.λ©€λ² λ©μλ
1. ν΄λμ€ μ μ
class Car :
#λ©€λ² λ³μ : μλ£ μμ±
door = cc = 0 #λ¬Έμ§, μμ§
name = None #null
#μμ±μ : κ°μ²΄ μμ± + λ©€λ²λ³μ μ΄κΈ°ν
def __init__(self, name, door, cc):
#λ©€λ²λ³μ μ΄κΈ°ν
self.name = name
self.door = door
self.cc = cc
#λ©€λ² λ©μλ : μλ£μ²λ¦¬ (μ‘°μ)
def info(self) : #μλμ°¨μ 보
self.kind = None #λμ λ©€λ² λ³μ
if self.cc >= 3000:
self.kind = "λν"
else :
self.kind = "μ€μν"
self.display() #self.λ©€λ²λ©μλ()
def display(self) : #μ 보 μΆλ ₯
print("%sλ %d ccμ΄κ³ (%s), λ¬Έμ§μ %dκ° μ΄λ€."
%(self.name, self.cc, self.kind, self.door))
2. κ°μ²΄ μμ±
car1 = Car("μλν", 5, 2000) #μμ±μ -> κ°μ²΄
#object.member
car1.info() #μλνλ 2000 ccμ΄κ³ (μ€μν), λ¬Έμ§μ 5κ°μ΄λ€.
car1.display()
car2 = Car('κ·Έλμ ', 5, 3000)
car2.info()
car2.display() #κ·Έλμ λ 3000 ccμ΄κ³ (λν), λ¬Έμ§μ 5κ° μ΄λ€.
ν΄λμ€ μμ± μ€μ΅
1. μν κ³μ’ ν΄λμ€ μμ±
λ©€λ²λ³μ : μκΈμ£Ό, κ³μ’λ²νΈ, μμ‘ - λͺ
μ¬
λ©€λ²λ©μλ : μμ‘νμΈ, μ
κΈνμΈ, μΆκΈνκΈ° - λμ¬
2. μκΈμ£Ό(accName), κ³μ’λ²νΈ(accNum) λμ λ©€λ²λ³μ μΆκ°νκΈ°
ex. μκΈμ£Ό : νκΈΈλ, κ³μ’λ²νΈ : 123-1234-12345
3. getBalacne() : μκΈμ£Ό, κ³μ’λ²νΈ, μμ‘ μΆλ ₯νκΈ°
class Account :
#μμ±μ (κ°μ²΄ μμ± + λ©€λ²λ³μ μμ±)
def __init__(self, bal, accName, accNo) :
#λμ λ©€λ² λ³μ μΆκ°
self.balance = bal #μμ‘ λ©€λ²λ³μ μμ±
self.accName = accName #μκΈμ£Ό
self.accNo = accNo #κ³μ’λ²νΈ
#λ©€λ² λ©μλ
#μμ‘ νμΈ : getter
def getBalance(self) :
return self.balance, self.accName, self.accNo
#μ
κΈνκΈ°
def deposit(self, money) :
if money < 0 :
print('~~ μ
κΈμ‘ νμΈ ~~')
else :
self.balance += money
print('μ
κΈμ΄ μλ£λμμ΅λλ€.')
μΆκΈνκΈ°
def withdraw(self, money) :
if self.balance < money :
print('~~ μμ‘ λΆμ‘± ~~')
else :
self.balance -= money
print('μΆκΈμ΄ μλ£λμμ΅λλ€.')
κ°μ²΄1 μμ±
acc = Account(1000, 'νκΈΈλ', 123-1234-12345) #ν΅μ₯ κ°μ€. 1000μμ μ
κΈ!
print('μμ‘ : ', acc.getBalance()) #μμ‘ : 1000
acc.deposit(20000) #μ
κΈ
print('μμ‘ : {0:3,d}'.format(acc.getBalance()))
acc.deposit(-20000) #~~ μ
κΈμ‘ νμΈ ~~
acc.withdraw(5000) #μΆκΈ
print('μμ‘ : {0:3,d}'.format(acc.getBalance()))
acc.withdraw(50000) #~~ μμ‘ λΆμ‘± ~~
κ°μ²΄2 μμ±
acc2 = Account(0, 'μ΄μμ ', '123-1234-12346') #κ³μ’ μ 보: (0, 'μ΄μμ ', '123-1234-12346')
acc2.deposit(100000) #κ³μ’ μ 보: (100000, 'μ΄μμ ', '123-1234-12346')
print('κ³μ’ μ 보:', acc2.getBalance()) #μ
κΈμ΄ μλ£λμμ΅λλ€.
acc2.withdraw(50000) #μΆκΈμ΄ μλ£λμμ΅λλ€.
ν΄λμ€ μμ
1. ν΄λμ€ μμ(Class Inheritance)
λΆλͺ¨ν΄λμ€λ₯Ό μ΄μ©ν΄ μμν΄λμ€λ₯Ό μμ±νλ λ¬Έλ²
λΆλͺ¨ν΄λμ€ : κΈ°μ‘΄ ν΄λμ€
μμν΄λμ€ : μλ‘μ΄ ν΄λμ€
μμ λμ : λ©€λ²λ³μ + λ©€λ²λ©μλ
νμ)
Class μμν΄λμ€(λΆλͺ¨ν΄λμ€) :
pass
2. λ©μλ μ¬μ μ (method override)
μμ κ΄κ³μμλ§ λμ€λ μ©μ΄
λΆλͺ¨ ν΄λμ€μ μν λ©μλλ₯Ό μμ ν΄λμ€μμ λ€μ μμ±
μΈμ μΆκ°, λ΄μ© μ¬μμ±
1. λΆλͺ¨ν΄λμ€ μ μ
class Parent :
#μμ±μ : κ°μ²΄ + λ©€λ²λ³μ μμ±
def __init__(self, name, job):
self.name = name
self.job = job
#λ©€λ² λ©μλ
def display(self):
print('name : %s, job : %s'%(self.name, self.job))
λΆλͺ¨ν΄λμ€ κ°μ²΄ μμ±
p = Parent('νκΈΈλ', '곡무μ')
p.display() #name : νκΈΈλ, job : 곡무μ
2. μμ1 ν΄λμ€
class Child1(Parent) : #class new_class(old_class)
#μμλμ : λ©€λ²(λ©€λ²λ³μ + λ©€λ²λ©μλ)
#self.name, self.job
#display()
def __init__(self, name, job) :
self.name = name
self.job = job
#λ³μλ§ μμλ μν
μμ1 ν΄λμ€ κ°μ²΄ μμ±
ch1 = Child1('μμ1', 'νμ¬μ')
ch1.display() #name : μμ1, job : νμ¬μ. μ μνμ§ μμμ§λ§ νΈμΆλ¨
3. μμ2 ν΄λμ€
class Child2(Parent) : #class new_class(old_class)
#μμλμ : λ©€λ²(λ©€λ²λ³μ + λ©€λ²λ©μλ)
#self.name, self.job
#display()
def __init__(self, name, job, gender) :
super().__init__(name, job) : #λΆλͺ¨ μμ±μ νΈμΆ
#self.name = name #λΆλͺ¨ λ©€λ²λ³μ
#self.job = job #λΆλͺ¨ λ©€λ²λ³μ
self.gender = gender #μΆκ°νλ μμ λ©€λ²λ³μ
#λ©μλ μ¬μ μ (method override) : μΈμ μΆκ°, λ΄μ© μμ λ±
def display(self): #2κ° -> 3κ°λ‘ νμ₯
print('name : %s, job : %s, gender : %s'
%(self.name, self.job, self.gender))
μμ2 ν΄λμ€ κ°μ²΄ μμ±
ch2 = Child2('μμ2', 'κΈ°μ μ', 'λ¨μ')
ch2.display() #name : μμ2, job : κΈ°μ μ, gender : λ¨μ
'λ°μ΄ν°λΆμκ° κ³Όμ > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
DAY40. Python DBμ°λ, CRUD, table (0) | 2021.11.12 |
---|---|
DAY39. Python νμΌ μ μΆλ ₯κ³Ό μμΈμ²λ¦¬ (0) | 2021.11.11 |
DAY39. Python ν¨μ (2)μΆμ½ν¨μ, μ ν¨λ²μ, λ΄μ₯ν¨μ, μ€μ²©ν¨μ (0) | 2021.11.09 |
DAY38. Python ν¨μ (1)ν¨μ, ν¨μμμ©, κ°λ³μΈμ (0) | 2021.11.08 |
DAY37. Python λ¬Έμμ΄ μ μ²λ¦¬, μΈλ―Ένλ‘μ νΈ λ°ν (0) | 2021.11.05 |