์์ ํด๋์ค๋ ์ํผํด๋์ค(๋ถ๋ชจ)๋ผ๊ณ ํ๋ฉฐ, ํ์ ํด๋์ค๋ ์๋ธํด๋์ค(์์)์ด๋ผ๊ณ ํฉ๋๋ค.
์๋ธํด๋์ค๋ ์ํผํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ค๋ณต์์ฑ์ ํผํ๋ฉฐ, ํจ์จ์ ๋์ผ ์ ์์ต๋๋ค.
*์์ ํด๋์ค ์ ์ธ
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๋, ๋ด์ฉ์ด ๊ณต๋ฐฑ์ด์ด๋ ํด๋์ค๋ฅผ ์ ์ธํ๋๋ก ํด์ค๋๋ค.) ๋์ค์ ์
๋ ฅํ ๊ฒ~ ์ผ๋จ ์ ์ธํ๊ณ ์ด๋ฐ ๋ป์ผ๋ก ๋ณด๋ฉด ๋ฉ๋๋ค.