ํ์ด์ฌ(Python) ๊ธฐ์ด (12) ํด๋์ค ,Self , ์ธ์คํด์ค( Class , instance )
- -
๋ฐฉ๋ํ ์์ ์นํ์ด์ง ๋ฐ ํ๋ก๊ทธ๋จ์์ ํด๋์ค๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ตฌ์ฑํ๋ ํจ์๋ฅผ ํ๋์ ๋ฌถ์์ผ๋ก ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์, ์ ์ง๋ณด์ ๋ฐ ๊ด๋ฆฌ, ์์ ์์๋ ํธ๋ฆฌํฉ๋๋ค.
*ํด๋์ค (Class) ์ ์
class ํด๋์ค๋ช
() : # ์ฒซ๊ธ์๋ ๋๋ฌธ์, ๋จ์ด์ฐ๊ฒฐ์์๋ ๋จ์ด์ฒซ๊ธ์๋ ๋๋ฌธ์. ex) UserInfo, DataType
ํจ์:
ํจ์:
ํจ์ ์ ์์ ํ์์ ๊ฐ์ต๋๋ค. ๋ค๋ง ํด๋์ค์ ๋ด๋ถ์๋ ํจ์, ์์ฑ, ๋ฉ์๋,์ด๊ธฐ์(initializer), ์๋ฉธ์(destructor), ์ธ์คํด์ค ๋ณ์, ํด๋์ค ๋ณ์ ๋ฑ์ด ๋ค์ด๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ 'ํด๋์ค ๋ฉค๋ฒ'๋ผ๊ณ ํฉ๋๋ค.
ํด๋์ค๋ช ์ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ฌ์ฉํ๋ฉฐ, ์ฌ๋ฌ๋จ์ด๋ฅผ ์ฌ์ฉ์, ๊ฐ ๋จ์ด์ ์ฒซ๊ธ์๋ ๋๋ฌธ์๋ก ์ฌ์ฉ๋ฉ๋๋ค. (์ด๋ฅผ CapWords๋ฐฉ์ ์ด๋ผ๊ณ ๋งํฉ๋๋ค)
*๊ฐ์ฒด (object)
ํด๋์ค๋ฅผ ํตํด ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ ๋๋ค. ์๋ ์ฝ๋์์ ๊ฐ์ฒด๋ test1๊ณผ test2๋ฅผ ๋งํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , test1๊ณผ test2๋ ํด๋์ค Sum์ ์ธ์คํด์ค ๋ผ๊ณ ๋งํฉ๋๋ค.
์ฌ๊ธฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ
test1.add(13) ์ ๋ณด๋ฉด, test1 -> self๋ก ์ ๋ฌ๋๋ฉฐ, (13)์ num์ผ๋ก ์ ๋ฌ๋๋ค.
class Sum: #ํด๋์ค Sum ์ ์ธ
def __init__(self) : #์ต์ด ์ด๊ธฐํ ๊ณผ์ . sum_num์ด๋ผ๋ ์ธ์คํด์ค ๋ณ์ ์์ฑ
self.sum_num = 0
def add(self, num): #ํด๋์ค์์ addํจ์. num์ ๋ํ์ฌ sum_num์ ๋ฃ๋๋ค.
self.sum_num += num
return self.sum_num #๋ํ sum_num์ ๋ฆฌํดํ๋ค.
test1 = Sum() #test1์ด๋ผ๋ ๊ฐ์ฒด ์์ฑ
test2 = Sum() #test2๋ผ๋ ๊ฐ์ฒด ์์ฑ
print(test1.add(13))
print(test1.add(9))
print(test2.add(18))
print(test2.add(2))
*๋ฉ์๋(Method)
ํด๋์ค๊ฐ ํ๋ ํ๋์ด๋ผ๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค. ์ธ์คํด์ค ๋ฉ์๋(instance method), ํด๋์ค ๋ฉ์๋(class method), ์ ์ ๋ฉ์๋(static method) ์ธ๊ฐ์ง๊ฐ ์์ต๋๋ค. ํ์ด์ฌ์์ ๊ฐ์ฅ ํํ ์ฌ์ฉ๋๋ ์ธ์คํด์ค ๋ฉ์๋๋ " self "๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ต๋๋ค.
*ํด๋์ค ๋ณ์์ ์ธ์คํด์ค ๋ณ์
ํด๋์ค ๋ณ์ : ํด๋น ํด๋์ค์์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณ์์ ๋๋ค. ํจ์ (๋ฉ์๋) ๋ฐ๊นฅ์ ์ ์ธ๋ฉ๋๋ค. ์ ๊ทผ์ ํจ์.๋ณ์๋ช ์ผ๋ก ํฉ๋๋ค.
์ธ์คํด์ค ๋ณ์ : self.๋ณ์๋ช ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๊ฐ ๊ฐ์ฒด ์ธ์คํด์ค๋ง๋ค ์กด์ฌํฉ๋๋ค. ํด๋์ค ๋ฐ์์๋ ๊ฐ์ฒด๋ณ์.์ธ์คํด์ค ๋ณ์ ๋ก ์ ๊ทผํฉ๋๋ค. (ex ์์ ์ฝ๋์ : test1.sum_num)
*ํด๋์ค ์์
์ค๋งํธํฐ(๊ฐค๋ญ์, ์์ดํฐ)์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค ์์ ๋ฅผ ๋ง๋ค์ด๋ณด์์ต๋๋ค.
class SmartPhone() : #ํด๋์ค ์์ฑ
time = 40 #ํด๋์ค ๋ณ์. ์ ๊ทผ์ SmartPhone.time
def __init__ (self, name, price): #์ต์ด์ ํด๋์ค ์ด๊ธฐํ๊ณผ์
#self๋ฅผ ํตํด ์ธ์คํด์ค
self.name = name
self.price = price
def info_print(self):
print("์ค๋งํธํฐ์ ์ ๋ณด : ",self.name, self.price)
iphone6s = SmartPhone("์์ดํฐ6s", "50๋ง์") #์์ดํฐ ์ธ์คํด์ค ์์ฑ
Galaxy10 = SmartPhone("๊ฐค๋ญ์10", "40๋ง์") #๊ฐค๋ญ์ ์ธ์คํด์ค ์์ฑ
iphone6s.info_print() #์ถ๋ ฅํจ์ (๋๋ฒ์งธํจ์ info_print)ํธ์ถ(์คํ)
Galaxy10.info_print()
์ด๋ ์ฌ์ฉํ ์ธ์คํด์ค iphone6s์ Galaxy10์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
(๋ค์์คํ์ด์ค : ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํ ํ ๋ ์ ์ฅ๋๋ ๋ ๋ฆฝ์ ๊ณต๊ฐ)
๊ทธ๋ฆฌ๊ณ ๋์ฌ๊ฒจ ๋ณผ๊ฒ self์ธ๋ฐ, ํด๋์ค ๋ด์ ํจ์๋ฅผ ๋ฉ์๋(๋์๊ธฐ๋ฅ)์ด๋ผ๊ณ ํฉ๋๋ค. self๋ฅผ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ฌ์ฉํด์ฃผ๋ฉด, self์ ๋ํ ๊ฐ์ ํ์ด์ฌ์์ ์๋์ผ๋ก ๋๊ฒจ์ค๋๋ค. ๋ง์ฝ self๋ฅผ ์ฌ์ฉํ์ง ์์ ํจ์๋ฅผ ์ ๋ ฅํด๋ณด๋ฉด
class SmartPhone() : #ํด๋์ค ์์ฑ
def __init__ (self, name, price): #์ต์ด์ ํด๋์ค ์ด๊ธฐํ๊ณผ์
#self๋ฅผ ํตํด ์ธ์คํด์ค
self.name = name
self.price = price
def info_print(self):
print("์ค๋งํธํฐ์ ์ ๋ณด : ",self.name, self.price)
def info_print_2(): #self ๋ฉ์๋ ์์
print('awefwefa')
iphone6s = SmartPhone("์์ดํฐ6s", "50๋ง์")
Galaxy10 = SmartPhone("๊ฐค๋ญ์10", "40๋ง์")
iphone6s.info_print_2()
Galaxy10.info_print_2()
self๊ฐ ์์ผ๋ฉด ์ธ์๋ฅผ ์๋์ผ๋ก ๋๊ฒจ์ฃผ์ง ์๊ธฐ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
* ํด๋์ค ๋ฉ์๋์ ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
class SelfTest():
def fun_1(): #ํด๋์ค ๋ฉ์๋๋ผ๊ณ ํจ, ํด๋์ค์์ ์ง์ ํธ์ถ ๊ณตํต ๊ณต์
print('fun_1 ํธ์ถ')
def fun_2(self): #์ธ์คํด์ค ๋ฉ์๋๋ผ๊ณ ํจ
print('fun_2 ํธ์ถ')
SelfTest.fun_1() #ํด๋์ค ๋ฉ์๋ ํธ์ถ๋ฒ (์ธ์คํด์ค ๋ณ์๊ฐ ํ์ ์๋ค)
SelfTest.fun_2("์๋ฌด๊ฑฐ๋") #์ธ์คํด์ค ๋ฉ์๋๋ ์ธ์คํด์ค ๋ณ์๊ฐ ํ์.
* ํด๋์ค์ ์์
์์ ํด๋์ค๋ ์ํผํด๋์ค(๋ถ๋ชจ)๋ผ๊ณ ํ๋ฉฐ, ํ์ ํด๋์ค๋ ์๋ธํด๋์ค(์์)์ด๋ผ๊ณ ํฉ๋๋ค.
์๋ธํด๋์ค๋ ์ํผํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ค๋ณต์์ฑ์ ํผํ๋ฉฐ, ํจ์จ์ ๋์ผ ์ ์์ต๋๋ค.
*์์ ํด๋์ค ์ ์ธ
PC๋ผ๋ ๋ถ๋ชจํด๋์ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ์ LG์ Samsung , ๋๊ฐ์ง์ ์์ํด๋์ค๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
*๋ถ๋ชจํด๋์ค ์ ์ธ(PC)
class PC:
'''์ํผ ํด๋์ค'''
def __init__ (self, price, color) :
self.price = price
self.color = color
def Info(self) :
return "๊ฐ๊ฒฉ์ : %s , ์๊น์ : %s" %(self.price, self.color)
*์์ํด๋์ค ์ ์ธ(LG, ์ผ์ฑ)
class Lg(PC) : #ํด๋์ค ์ ์ธ๋ค ๊ดํธ์ ๋ถ๋ชจํด๋์ค๋ฅผ ์
๋ ฅํ๋ฉด ์์
def __init__(self, name, price, color) :
super().__init__(price,color) #price, color๋ฅผ ์ํผํด๋์ค๋ก ๋๊ธฐ๋ ค๋ฉด initํ์
self.name = name
def model(self) :
return "Your PC's Name : %s" %(self.name)
class Samsung(PC) :
def __init__(self, name, price, color) :
super().__init__(price,color) #price, color๋ฅผ ์ํผํด๋์ค๋ก ๋๊ธฐ๋ ค๋ฉด initํ์
self.name = name
def model(self) :
return "Your PC's Name : %s" %(self.name)
์์์ ๋ถ๋ชจ์ ๋ฉ์๋๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๊ณ ํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ถ๋ชจํด๋์ค์ Info๋ฅผ ์ฌ์ฉํด๋ณด๋ฉด,
model1 = Lg("gram", "170๋ง์", "ํฐ์")
print(model1.Info())
์ถ๋ ฅ๊ฐ->>>>>>>>>
๊ฐ๊ฒฉ์ : 170๋ง์ , ์๊น์ : ํฐ์
์ด๋ ๊ฒ ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
*๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(method overriding)
๋ง์ฝ ๋ฐฉ๊ธ ์ฌ์ฉํ ๋ถ๋ชจํด๋์ค์ Info()๋ผ๋ ๋ฉ์๋๋ฅผ ์์๋ ๊ฐ๊ณ ์๋ค๋ฉด, ์์์ Info()๊ฐ ํธ์ถ๋ฉ๋๋ค.
์์ํด๋์ค์ธ LG์๋ Info()๋ฅผ ์ถ๊ฐํ ํ, Info๋ฅผ ํธ์ถํด๋ณด๊ฒ ์ต๋๋ค.
class PC:
'''์ํผ ํด๋์ค'''
def __init__ (self, price, color) :
self.price = price
self.color = color
def Info(self) : #๋ถ๋ชจ ํด๋์ค์ Info
return "๊ฐ๊ฒฉ์ : %s , ์๊น์ : %s" %(self.price, self.color)
class Lg(PC) :
def __init__(self, name, price, color) :
super().__init__(price,color) #price, color๋ฅผ ์ํผํด๋์ค๋ก ๋๊ธฐ๋ ค๋ฉด initํ์
self.name = name
def model(self) :
return "Your PC's Name : %s" %(self.name)
def Info(self):
return "์ด๊ฑด ์์ํด๋์ค์ Info"
class Samsung(PC) :
def __init__(self, name, price, color) :
super().__init__(price,color) #price, color๋ฅผ ์ํผํด๋์ค๋ก ๋๊ธฐ๋ ค๋ฉด initํ์
self.name = name
def model(self) :
return "Your PC's Name : %s" %(self.name)
model1 = Lg("gram", "170๋ง์", "ํฐ์")
print(model1.Info())
์ถ๋ ฅ๊ฐ------------------->>>>>
์ด๊ฑด ์์ํด๋์ค์ Info
*๋ค์ค์์, Inheritance Info , class.mro()
์์ ์์ ์ฒ๋ผ ํ๋๊ฐ์ ์์๊ด๊ณ๋ ํ์ ํ๊ธฐ ์ฝ์ต๋๋ค. ํ์ง๋ง ์ค์ฒฉ๋๊ณ , ์ฌ๋ฌ๊ฐ์ ๋ถ๋ชจ, ์์ํด๋์ค๊ฐ ์กด์ฌํ๋ค๋ฉด
ํ์ ํ๊ธฐ ์ด๋ ต๊ฒ ๋๋๋ฐ, ์ด๋ ํด๋์ค๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ธ ํด ๋ณผ์์๋ ํค์๋๊ฐ ์์ต๋๋ค.
mro๋ฅผ ์ฌ์ฉ ํ๋ฉด ๋ฉ๋๋ค.
class X() :
pass
class Y() :
pass
class Z() :
pass
class A(X,Y) : #X,Y๋ฅผ ์์๋ฐ์
pass
class B(Y,Z) : #Y,Z๋ฅผ ์์๋ฐ์
pass
class M(B,A,Z) : #B,A,Z๋ฅผ ์์๋ฐ์
pass
print("X๋", X.mro())
print("A๋", A.mro())
print("M์", M.mro())
์ถ๋ ฅ๊ฐ------->>>>>>>
X๋ [<class '__main__.X'>, <class 'object'>]
A๋ [<class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class 'object'>]
M์ [<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]
(ํด๋์ค ๋ด๋ถ์ pass๋, ๋ด์ฉ์ด ๊ณต๋ฐฑ์ด์ด๋ ํด๋์ค๋ฅผ ์ ์ธํ๋๋ก ํด์ค๋๋ค.)
'๐ ํ์ด์ฌ (Python)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
-
ํ์ด์ฌ (python) - ๋ชจ๋ , ํจํค์ง ( module , package ) ์์ฑ , import์ alias 2019.12.09
-
ํ์ด์ฌ(Python) ๊ธฐ์ด (13) ํด๋์ค์ ์์, ๋ค์ค์์ 2019.12.09
-
ํ์ด์ฌ ๊ฐ์ํ๊ฒฝ ๋ณด์ ์๋ฌ, ๋ณด์ ์ค๋ฅ about_Execution_Policies PSSecurityException 2019.12.07
-
<matplotlib> - 2D ์ค์๊ฐ ๊ทธ๋ํ 2๊ฐ ๊ทธ๋ฆฌ๊ธฐ. (animation) 2019.12.02
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค