본문 바로가기
기본적인프로그래밍/python

[python] class 란 무엇일까?

by 인포메틱스 2022. 3. 22.
반응형

 

1. python class가 중요한 이유?

 

 python을 잘 다루기 위해서 필수적으로 해야하는 부분이 이 class입니다.

 

저도 초반에 python을 야메로 배우면서 이 class라는 부분을 대충 넘겼는데, 나중에 되서 조금 고생좀 했습니다. 

 

class에 대해서 정말 잘 설명해주는 곳도 없었고, 계산기비유를 하는데.. 그냥 +,-,/,* 하면 되는 것 아닌가 했었죠.

 

그런데 deep learning에서도 이 class 기능으로 어떤 함수를 만들어 쉽게 진행하는 것을 보았고, 기타 이외에 정말 고수들은 이 class를 잘 사용한다는 특징이 있었습니다(deep learning에서 generator 생성시에도 class를 사용하더군요.).

 

여하튼 본론으로 들어와서 class를 꼭 이해하고 넘어가시길 바랍니다. 

 

2.  python class란?

 

 class를 보시면 게임을 생각해보시면 됩니다(계산기 갖다 버려).

 

게임에는 다양한 케릭터들을 생성할 수가 있습니다. 그 각 케릭터를 하나의 class라고 생각하시면 됩니다. 그리고 다양한 케릭터를 만들게 되면 객체들이 생성이 된다 라고 생각하면 되구요.

 

 게임 케릭터를 이용하여 다양한 행동을 할 수가 있고, 게임마다 다양한 설정이 있습니다. 여기서 움직이는 행동의 경우 method이고, 설정의 경우 속성(attribute)라고 생각하시면 됩니다.

 

 속성에서도 python에는 class 속성, 인스턴스 속성 이렇게 나누는데 이는 class 속성은 설정내에서 변하지 않는 부분이고, 인스턴스의 경우 변할수있는 부분입니다(인스턴스 속성의 경우 method를 통해 변화가 가능하지만, class 속성의 경우 class외부에서 변경을 해주지 않는한 변하지 않습니다.).

 

그렇기 때문에 게임내에서 예를 들면 케릭터간에 우위관계? 케릭이 물속성을 갖고있으면 불속성을 갖는 케릭보다 쎄다. 이런 속성의 경우는 class 속성이겠죠.

 

그리고 릭터가 레벨이 오르면 힘을 찍거나, int를 찍거나 등등 어떠한 능력치를 올릴때 int, str과 같은 부분을 인스턴스 속성이라 생각하시면 됩니다(뭔가 계산기 같은.. ).

 

3. python class 예제

 

예시로 ork와 elf 두 개의 케릭터를 만들어 보겠습니다.

 

먼저 ork를 생성하겠습니다.

 

class ork:
    class1='Dark' # class 속성
    def __init__(self,name,level,height,str1,int1,def1):
        self.name=name
        self.level=level
        self.height=height
        self.str1=str1
        self.int1=int1
        self.def1=def1
    
    def show_ability(self):
        print("Str :",self.str1)
        print("Int :", self.int1)
        print("Def :", self.def1)
    
    def ability(self,str2,int2,def2):
        self.upstr=str2
        self.upint=int2
        self.updef=def2
        print(self.upstr,self.upint,self.updef)
    
    def levelup(self):
        self.str1+=int(self.upstr)
        self.int1+=int(self.upint)
        self.def1+=int(self.updef)
        print(self.name, " Level Up :", str(self.level) ,"->", str(self.level+1))
        self.level+=1
        print(self.str1,self.int1,self.def1)
        
    def levelup1(self,str2,int2,def2):
        self.str1+=int(str2)
        self.int1+=int(int2)
        self.def1+=int(def2)
        print(self.name, " Level Up :", str(self.level) ,"->", str(self.level+1))
        self.level+=1
        print(self.str1,self.int1,self.def1)
        
    def fight(self,opponent):
        if opponent.class1=='Light':
            print('You Loss')
        else:
            print('You Win')

 

ork를 class 속성은 Dark로 진행하였고, 초기 인스턴스 속성에는 이름, 레벨, str, int, def를 설정을 하였습니다. 그리고 show_ability를 통해서 현재 능력치를 알 수 있게 했습니다.

 

그리고 ability를 통해서 다음 레벨에서 어떤 수치들을 올릴 것인지 설정할 수가 있습니다. 그리고 levelup을 통해서 level상승과 ability를 통해 설정한 값들을 올릴 수가 있습니다.

 

levelup1의 경우 ability와 levelup을 합쳐서 바로 능력치를 올리도록 하였습니다. 

 

실제로 꼭 해보시길 바랍니다. 저도 이해한 줄 알고 포스팅하다가 1시간이 지나가 버렸습니다.

 

그리고 fight방법을 통해서 싸울 상대가 'Light' 속성을 갖는다면 class를 갖을 경우 무조건 패배하게 만들었습니다.

 

다음은 elf를 제작할 것이고,

 

class elf:
    class1='Dark' # class 속성
    def __init__(self,name,level,height,str1,int1,def1):
        self.name=name
        self.level=level
        self.height=height
        self.str1=str1
        self.int1=int1
        self.def1=def1
    
    def show_ability(self):
        print("Str :",self.str1)
        print("Int :", self.int1)
        print("Def :", self.def1)
    
    def ability(self,str2,int2,def2):
        self.upstr=str2
        self.upint=int2
        self.updef=def2
        print(self.upstr,self.upint,self.updef)
    
    def levelup(self):
        self.str1+=int(self.upstr)
        self.int1+=int(self.upint)
        self.def1+=int(self.updef)
        print(self.name, " Level Up :", str(self.level) ,"->", str(self.level+1))
        self.level+=1
        print(self.str1,self.int1,self.def1)
        
    def levelup1(self,str2,int2,def2):
        self.str1+=int(str2)
        self.int1+=int(int2)
        self.def1+=int(def2)
        print(self.name, " Level Up :", str(self.level) ,"->", str(self.level+1))
        self.level+=1
        print(self.str1,self.int1,self.def1)
        
    def fight(self,opponent):
        if opponent.class1=='Dark':
            print('You Win')
        else:
            print('You Loss')

 

실행해보면 다음과 같습니다.

 

 

test_ork를 생성하여 레벨을 3까지 올려보았습니다. 그리고 elf도 레벨 4까지 만들고 test_ork와 한판 붙어보았습니다.

뭐 능력치에 상관없이 무조건 ork가 지도록 만들긴 했습니다.

 

이렇게 class에 대해서 설명을 드렸고, 계속적으로 class 비슷하게 포스팅을 할 예정입니다. generator 만드는 것도 배워서 포스팅 하도록 하겠습니다.

 

 

감사합니다.

728x90
반응형

댓글