์๋ก ๊ด๋ จ์ฑ์ด ํฐ ๋ฐ์ดํฐ(attribute)์ ํจ์(methods)๋ฅผ ํ ๋ฐ ๋ฌถ๋ ํ์
ํด๋์ค์ ํ์์ฑ) ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ณ์ ์ธ ํจ์๋ฅผ ๋งค๋ฒ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ๋ฅ์ ๋ํ ํด๋์ค๋ฅผ ๊ตฌํํ๊ณ ๊ทธ๊ฒ์ ๋ํ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ์ ์๋๋ก ํจ.
๊ณผ์ ํ - class, ๊ณผ์ ํ๋ก ๋ง๋ค์ด์ง ๊ณผ์ - object ์ ๋์
๋์ผํ ํด๋์ค๋ก ๋ง๋ ๊ฐ์ฒด๋ค์ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ค.
ํน์ class ๋ก๋ถํฐ ๋ง๋ค์ด์ง๋ ๊ฐ์ฒด๋ค์ ๋ฐ์ดํฐ์ ํจ์๋ ๊ฐ๊ฐ ๋ฉค๋ฒ ๋ฐ์ดํฐ์ ๋ฉค๋ฒ ๋ฉ์๋๋ผ๊ณ ํจ.
๊ธฐ๋ณธ๊ตฌ์กฐ
class FourCal: pass #์๋ฌด๊ฒ๋ ์ํํ์ง ์๋ ๋ฌธ๋ฒ. ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์์. a=FourCal() #a๋ FourCal class์ ๊ฐ์ฒด type(a) # FourCal์ ์ธ์คํด์ค์์ ์ถ๋ ฅํด์ค.
a=calculator()
#a๋ ๊ฐ์ฒด์ด์ ํด๋์ค calculator์ ์ธ์คํด์ค์.
method class ์์ ๊ตฌํ๋ ํจ์
method ํธ์ถ ๋ฐฉ๋ฒ
(1) ํด๋์ค์ด๋ฆ.method : self๋ฅผ ๋ฐ๋์ ์ ๋ฌ
(2) ๊ฐ์ฒด.method : self๋ฅผ ๋ฐ๋์ ์๋ต
self ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๋ ๋ณ์
method์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์(self)์๋ ๊ทธ method๋ฅผ ํธ์ถํ ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋จ. self ๋ง๊ณ ๋ค๋ฅธ ์ด๋ฆ ์ฌ์ฉํด๋ ๋จ.
class ์์์ ํจ์๋ฅผ ์ ์ํ ๋์๋ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋๋ฐ ํด๋์ค ๋ฐ์์ method๋ฅผ ํธ์ถํ ๋์๋ python์ด ์๋์ผ๋ก ๋ถ์ฌ์ฃผ๋ฏ๋ก ์
๋ ฅ๊ฐ์ ๋ฃ์ด์ค ํ์ ์์.
๊ฐ์ฒด๋ณ์ ๊ฐ์ฒด์ ์์ฑ๋๋ ๊ฐ์ฒด๋ง์ ๋ณ์ ๋ฐ ์์์ first
ํด๋์ค๋ก ๋ง๋ ๊ฐ์ฒด์ ๊ฐ์ฒด ๋ณ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ฐ์ฒด๋ณ์์ ๋ฌด๊ดํ๊ฒ ์๋ ๊ฐ์ ์ ์งํจ.
class FourCal(): #์ฌ์น์ฐ์ฐ ํด๋์ค
def setdata(self, first, second): #๊ฐ์ฒด์ ๋งค๊ฐ๋ณ์๋ฅผ ํ ๋น method๋ฅผ ํ ๋นํ ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋จ.
self.first=first #setdata(3,4)ํ์ ๋ a.first=3์ด ๋๋๋ก
#a.first=3 a ๊ฐ์ฒด์ ๊ฐ์ฒด๋ณ์ first๊ฐ ์์ฑ๋๊ณ ๊ฐ 4๊ฐ ์ ์ฅ
self.second=second
def add(self):
result=self.first+self.second
return result
#self.fist ๋งค๊ฐ๋ณ์์ ํฌํจํ๊ฑฐ๋ ๋ค์ ์ง์ ํด์ค ํ์ ์์. ์ด ํจ์ ์์์ setdata ํ ํ์๋ ์์.
# ํจ์ ์ฌ์ฉํ ๋ setdat๋ฅผ ๋จผ์ ํธ์ถํ์ผ๋ฉด ๋ง๋ค์ด์ง a.first์ a.second๋ ๊ณต์ ๋จ
# setdata๋ฅผ ๊ตณ์ด ๋ง๋๋ ์ด์ ) data๋ฅผ ํจ์ ํธ์ถํ ๋๋ง๋ค ์
๋ ฅํ์ง ์๊ณ ํ ๋ฒ ์
๋ ฅํ๋ฉด ํจ์์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋๋ก
#class ์ฌ์ฉํด๋ณด๊ธฐ
a=FourCal(4,2)
a.first=4 # a ๊ฐ์ฒด์ ๊ฐ์ฒด๋ณ์ first๊ฐ ์์ฑ๋๊ณ 4๋ผ๋ ๊ฐ์ด ์ ์ฅ๋จ.
b=FourCal(3,8)
b.first=3 # a๊ฐ์ฒด์ ๊ฐ์ฒด๋ณ์ first๋ ์ฌ์ ํ 4.
class Myname:
name='lee' #ํด๋์ค ๋ณ์ name
print(Myname.name) #'lee'๊ฐ ์ถ๋ ฅ๋จ
๊ฐ์ฒด ๋ณ์<->ํด๋์ค ๋ณ์: ํด๋์ค ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ณ๊ฒฝ๋ ํด๋์ค ๋ณ์๋ ๊ทธ ํด๋์ค๋ก ๋ง๋ ๋ชจ๋ ๊ฐ์ฒด์ ๊ณต์ ๋๋ค.
a=Myname()
b=Myname()
print(a.name) #'lee'์ถ๋ ฅ
Myname.name='kim' #ํด๋์ค ๋ณ์ name์ 'kim'์ผ๋ก ๋ณ๊ฒฝ
print(a.name) #'kim'์ถ๋ ฅ
print(b.name) #'kim'์ถ๋ ฅ
๋ํ์ ์ผ๋ก ํด๋์ค์์ ๋ง๋ค์ด์ง๋ ๊ฐ์ฒด์ ๊ฐฏ์ ์ธ๊ธฐ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋จ.
class Student:
#ํด๋์ค๋ณ์
countStudent=0
def __init__(self,givenid,givenname):
self.id=givenid
self.name=givenname
Student.countStudent=Student.countStudent+1 #ํด๋์ค๋ณ์์ด๋ฏ๋ก student๋ก์์
__init__์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค ํธ์ถ๋๋ ํจ์.
๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค countStudent 1์ฉ ์ฆ๊ฐ-> countStudent ์ถ๋ ฅํ๋ฉด ๋ง๋ค์ด์ง ๊ฐ์ฒด์ ๊ฐฏ์ ์
์ ์์.
๊ฐ์ฒด๋ณ์๋ ํด๋์ค๋ณ์์ ๋์ผํ ์ด๋ฆ์ผ๋ก ์์ฑ๊ฐ๋ฅ
Myname.name -> ํด๋์ค ๋ณ์ ํด๋์ค์ด๋ฆ.ํด๋์ค๋ณ์ ํํ
a.name() -> ๊ฐ์ฒด ๋ณ์. ๊ฐ์ฒด.๊ฐ์ฒด๋ณ์ ํํ
a.name='park'
Myname ํด๋์ค์ name์ด ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ a ๊ฐ์ฒด์ name ๊ฐ์ฒด ๋ณ์๊ฐ ์๋กญ๊ฒ ์์ฑ๋จ.
์ด๋ class์ ๊ฐ์ ์ด๋ฆ์ ํด๋์ค๋ณ์ name์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๋จ, ํด๋์ค๋ณ์์ ์ด๋ฆ ๋ณ๊ฒฝ ์ ๊ฐ์ฒด์ ๋ณ์๋ ๋ณ๊ฒฝ๋จ
์ ์ฝ๋์์ addํจ์๋ first์ second ๋ณ์๋ฅผ ํ์๋ก ํ๋ฏ๋ก setdata ์ํ ์ addํจ์๋ฅผ ์ํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํจ.
๋ฉค๋ฒ attribute๋ฅผ ์๋์ผ๋ก ์ด๊ธฐํ, ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ฉด ๋ฐ๋์ ํธ์ถํด์ผ ํ๋ ํจ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ๋ ๋ฑ์ ์ญํ
๊ฐ์ฒด์ ์ด๊น๊ฐ์ ์ค์ ํด์ผ ํ ๋-> ์ ์ฝ๋์ฒ๋ผ method ํธ์ถ๋ณด๋ค๋ ์์ฑ์๋ฅผ ์ด์ฉ
(class ์์ ํจ์๊ฐ ๊ณต์ ํ ์ ์๋ ๊ฐ)
๊ธฐ๋ณธ๊ตฌ์กฐ
def __init__(self,first,second): self.first=first self.second=second #๊ฐ์ฒด ์์ฑ์ ์ฐจ์ด์ a=FourCal() -> ์ค๋ฅ ๋ฐ์. ์์ฑ์์ ๋งค๊ฐ๋ณ์ first์ second์ ํด๋นํ๋ ๊ฐ์ด ์ ๋ฌ๋์ง ์์๊ธฐ ๋๋ฌธ์ a=FourCal(4,2) #__init__method๊ฐ ํธ์ถ๋๋ฉด์ first์ second๋ผ๋ ๊ฐ์ฒด ๋ณ์ ์์ฑ
method ์ด๋ฆ์ __init__ ๊ฐ์ด ์ค์ ํ๋ฉด ์๋์ผ๋ก ์์ฑ์๋ก ์ค์ ๋จ.
setdata์ ๋งค๊ฐ๋ณ์, ์ํ๋ฌธ์ ๋์ผ.
์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค ๋ ๋ค๋ฅธ ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ์ ์ ์๊ฒ ๋ง๋๋ ๊ฒ
ํด๋์ค์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ณ ์ถ์๋ฐ ๊ธฐ์กด ํด๋์ค๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๊ฑฐ๋ ์์ ์ด ๋์ง ์๋ ์ํฉ์์ ์ฌ์ฉ ๊ฐ๋ฅ
๊ธฐ๋ณธ๊ตฌ์กฐ)
class ์๋ก์ด ํด๋์ค ์ด๋ฆ(์์ํ ํด๋์ค ์ด๋ฆ)
์๋ก์ด ํด๋์ค๊ฐ () ์์ ํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ(methods)๊ณผ ๋ฐ์ดํฐ(attribute)๋ฅผ ์์ํจ. self.first์ self.second๋ ๊ณต์ ํจ. ์ถ๊ฐํด์ค ํ์ ์์.
class newFourCal(Fourcal):
pass
#Fourcal ํด๋์ค์ add, mod ๋ฑ ๋ชจ๋ ๊ธฐ๋ฅ ์ํ ๊ฐ๋ฅ
a=newFourCal(4,2)
a.add() -> 6
์๋ฏธ: ๋ถ๋ชจ ํด๋์ค์ ์๋ method๋ฅผ ๋์ผํ ์ด๋ฆ์ผ๋ก ๋ค์ ๋ง๋๋ ๊ฒ, ์ฆ ๋ฎ์ด์ฐ๊ธฐ.
๋ฎ์ด์ด ์ดํ์ method๋ฅผ ํธ์ถํ๋ฉด ๋ถ๋ชจ ํด๋์ค์ method๊ฐ ์๋ overridingํ method๊ฐ ํธ์ถ๋จ.
(1) ํด๋น ํด๋์ค๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด(instance) ์์ฒด๋ฅผ ์ถ๋ ฅํ ๋ ๋ฌธ์์ด๋ก ์ค๋ช
(class๊ฐ admin ํ์ด์ง์์ ์ด๋ป๊ฒ ์ถ๋ ฅ๋๋์ง๋ฅผ ์ ์
print(๊ฐ์ฒด์ด๋ฆ)->str method๊ฐ ํธ์ถ๋์ด ๋ฌธ์์ด๋ก ๊ฐ์ฒด์ ์ ๋ณด(ํด๋์ค ์ด๋ฆ,์ ์ฅ์์น)๋ฅผ ๋ฐํํจ.
(2) ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ถ๋ ฅํ๊ณ ์ถ์ ๋-> print(๊ฐ์ฒด์ด๋ฆ)์ผ๋ก init์์ ๊ท์ ํ ๋ณ์์ ์ถ๋ ฅ ํ์์ ์ง์
__str__() ํจ์ ์ด์ฉํ๊ธฐ
class Student:
def __init__(self, givenID, givenName):
self.id = givenID
self.name = givenName
def __str__(self): #print(๊ฐ์ฒด์ด๋ฆ) ํ์ ๋ ๋ฐํ๋๋ ๋ฌธ์์ด์ ์ ๋ณด ์๋ ค์ค.
msg = "id:{}, name:{}".format(self.id, self.name)
return msg
student1 = Student(20190001, "Harry Potter")
print(student1) #student1.__str__()๊ณผ str(student1)์ ๊ธฐ๋ฅ์ด ๊ฐ์.
#getID์ getName ํจ์ ์ ์ ์ ํด์ค๋ ์ค๋ฅ ๋ฐ์ ์ํ๋๋ฐ..? return์ ๊ผญํด์ค์ผ ํ๋
๋ฉค๋ฒ attribute์ ์ด๋ฆ
๊ฐ์ ์ ์ผ๋ก attribute์ ์ง์ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ๋ง์์ค. ์ง์ ์ ์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ ๋ง๊ณ ๋ฉค๋ฒ method๋ฅผ ํตํด์๋ ์ฝ๊ณ ์ธ ์ ์์.
self.id, countStudent ์ด๋ฐ ์์ผ๋ก ๋ฉค๋ฒ attribute์ ์ด๋ฆ ์์ __ ๋ฅผ ํ๋ ํ์
์์ ๊ด๊ณ(x)
A ํด๋์ค์ ์์ฑ์ instance๋ฅผ ๋ฃ์ด์ Aํด๋์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ Bํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฉค๋ฒ attribute๋ก ๊ฐ์ง๋ฉด Aํด๋์ค์ Bํด๋์ค๋ฅผ ํฌํจ๊ด๊ณ๋ผ๊ณ ํ ์ ์๋ค.
class Student:
def __init__:
def ์ด์ฉ๊ตฌ์ ์ฉ๊ตฌ..
class Department:
def __init__(self):
memberStudent = Student()