Python class 함수에 관하여 공부를 하긴 했지만 뭔가 머리 속으로 명확하게 자리잡고 있는 것 같지 않아서
내가 가장 좋아하는 축구 도메인으로 예시 코드를 작성하면서 정리해보았다...!
class EPL():
def __init__(self,team,key_def,key_mid):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
# EPL 클래스 생성
epl = EPL("MU","Varane","Antony")
print(epl.key_mid)
Antony
기본적으로 클래스 내의 함수를 선언할 때는
def __init(self...)와 같이 생성자를 생성해주는 것이 기본!
class EPL():
def __init__(self,team,key_def,key_mid):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
def is_EPL_player(self):
list = ["Kane","Son","Antony","Varane"]
if self.key_mid in list:
return "of coruse"
else:
return "Abs No"
epl = EPL("TOT","Dier","Kane")
epl2 = EPL("TOT","Sanches","Son")
epl3 = EPL("PSG","Ramos","Messi")
print(epl.is_EPL_player())
print(epl2.is_EPL_player())
print(epl3.is_EPL_player())
of coruse
of coruse
Abs No
# 클래스 내부에 함수 구현
# EPL 선수인지 아닌지 구분
class EPL():
def __init__(self,team,key_def,key_mid):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
def is_EPL_player(self):
list = ["Kane","Son","Antony","Varane","eriksen"]
if self.key_mid in list:
return "of course"
else:
return "Abs No"
def print_team(self):
return f"This team is {self.team}."
epl = EPL("TOT","Dier","Kane")
epl2 = EPL("TOT","Sanches","Son")
epl3 = EPL("PSG","Ramos","Messi")
print(epl.print_team())
print(epl2.print_team())
print(epl3.print_team())
This team is TOT.
This team is TOT.
This team is PSG.
class Champions(EPL):
def __init__(self,team,key_def,key_mid,key_att):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
self.key_att = key_att
chams = Champions("Bar","umtiti","Dejong","Depay")
chams2 = Champions("TOT","Dier","Kane","Son")
print(chams.is_EPL_player())
print(chams2.is_EPL_player())
Abs No
of course
class Europa(EPL):
def __init__(self,team,key_def,key_mid,key_att):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
self.key_att = key_att
새로운 Class를 생성하고 이를 상속 받기 위해서는 위와 같이 New_Class(Super_Class) 형식으로 사용해야한다.
class Champions(EPL):
def __init__(self,team,key_def,key_mid,key_att):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
self.key_att = key_att
def is_EPL_player(self):
list = ["Kane","Son","Antony","yoon"]
if self.key_mid in list:
return "of course"
else:
return "Abs No"
class Europa(EPL):
def __init__(self,team,key_def,key_mid,key_att):
self.team = team
self.key_def = key_def
self.key_mid = key_mid
self.key_att = key_att
chams = Champions("TOT","Dier","eriksen","Son")
print(chams.is_EPL_player())
europa = Europa("MU","Varane","eriksen","CR")
print(europa.is_EPL_player())
Abs No
of course
같은 is_EPL_player()함수를 불러왔는데 왜 결과 값이 다를까?
chams.is_EPL_player()의 경우 Champions Class안에 포함되어 있는 def is_EPL_player 내의 리스트에서 비교했기 때문에 eriksen이 존재하지 않으므로 Abs NO가 출력되고
europa.is_EPL_player()의 경우에는 Europa Class안에 def is_EPL_player 함수가 포함되어 있지 않기 때문에 처음에 선언하나 Super class(EPL)에 있는 is_EPL_player 함수 내의 리스트에서 비교했기 때문에 이때에는 eriksen이 존재한다 그렇기 때문에 of course가 출력된다.