티스토리 뷰

<클래스 생성 방법>

다음의 예제 코드를 보자.

class animal:
    name = "" 
    def __init__(self, initValue=0) :
        self.__age = initValue
        print("생성자 실행")

    def getAge(self):
        return self.__age

    def setAge(self,age):
        self.__age =age

    def __add__(self,other):
        return self.__age + other.__age

첫번째 줄부터 보면 먼저 class 키워드를 통해 클래스를 선언할 수 있다.

 

두 번째 줄에 정의 한 변수는 클래스 전체에서 공통으로 사용되는 변수이다.

아래와 같이 클래스를 통해 객체(인스턴스)를 여러 개 생성할 수 있지만, 그 인스턴스 간의 공유되는 공통의 변수이다.

dog = animal()
cat = animal(5)

세번째 줄의 __init__ 은 intialize의 약자로 생성자를 뜻한다. 기본적으로 매개변수로는 자기자신을 뜻하는 self가 들어가야 하며, 필요한 경우 추가로 매개변수를 설정할 수 있다. 예제 코드에는 default 값이 0인 initValue를 추가하였다.

 

네번째 줄의 self.__age는 객체의 멤버 변수이며 변수 명 앞에 __(밑 줄 두개)를 붙일 경우 private 변수로 인식된다. 

일반적으로는 변수는 private로 선언하는 것이 권장된다. 변수를 private로 선언하였기 때문에, 변수에 접근하는 접근자와 변수의 값을 변경하기 위한 설정자가 필요하다.

 

따라서 getAge 메소드와 setAge 메소드를 정의하여, 이들 메소드를 통해 멤버 변수의 값을 읽거나 바꿀 수 있다.

 

__add__는 + 연산자를 오버로딩하는 메소드다. 이와 같이 __add__로 메소드를 지정할 경우 + 연산자의 연산을 재정의 할수 있다.

 

실행 결과: 



<상속>

다음의 짧은 몇 줄의 코드를 통해 상속에 대해 간략히 알아보고자 한다.

class bird(animal):
    def __init__(self,initValue=0):
        super().__init__(initValue)
        print("자식 생성자 실행")
        
    def getAge(self):
        print("getAge 실행")
        return self.__age

첫 줄의 bird(animal)은 bird라는 객체가 animal 객체를 상속한다는 의미이며,

마찬가지로 생성자를 지정해줄 수 있는데, 자식 객체에서 부모 객체에 접근할 때는 super()를 이용한다.

즉 super().__init__(initValue)는 부모객체의 __init__ 메소드를 호출한다.

 

또한 부모가 가지고 있는 함수를 다시 정의할 경우, bird 객체에서는 bird객체만의 리메이크된 메소드를 구현할 수 있다.

이를 메소드 오버라이딩이라고 한다.


댓글
반응형
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함