[Python] 예시를 통한 Class 이해하기

yoonseok choi·2022년 9월 7일
0

Python

목록 보기
4/4
post-custom-banner

Python class 함수에 관하여 공부를 하긴 했지만 뭔가 머리 속으로 명확하게 자리잡고 있는 것 같지 않아서
내가 가장 좋아하는 축구 도메인으로 예시 코드를 작성하면서 정리해보았다...!


Class 예시

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 내부 함수 구현

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 상속


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) 형식으로 사용해야한다.


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가 출력된다.


profile
Concilio et Labore ( 지혜와 노력으로 )
post-custom-banner

0개의 댓글