Python 기초

object 클래스

파이썬에서는 클래스를 작성할 때, 부모 클래스를 명시적으로 지정하지 않으면 object 클래스의 자식 클래스로 암묵적으로 간주됩니다.

따라서 모든 클래스의 가장 위에는 object 클래스가 있다고 생각하면 됩니다.

python object class 일반 클래스 diagram에 대한 이미지 검색결과

 

클래스의 상속 계층도를 그려보면 위의 그림과 같이 됩니다. 모든 클래스는 단 하나의 부모 클래스를 가지며 상속 계층도를 따라서 올라가보면 맨 위에는 항상 object 클래스가 있습니다.

object 클래스는 모든 클래스에 공통적인 메소드를 구현합니다.

 

object 클래스가 가지고 있는 메소드들을 요약하면 다음과 같습니다.

메소드 메소드

__init__(self [, args ...] )

생성자

ex) obj = className(args)

__str__(self)

문자열 표현 반환

ex) str(obj)

__del__(self)

소멸자

ex) del obj

__cmp__(self, x)

객체 비교

ex) cmp(obj, x)

__repr(self)

객체 표현 문자열 반환

ex) repr(obj)

 

 

__repr__() 메소드

__repr__() 메소드는 object 클래스에서 정의된 메소드입니다. 이것은 일반적으로 재정의하여야 하는 메소드입니다.

object 클래스의 __repr__() 메소드는 객체가 가진 정보를 한 줄의 문자열로 만들어서 반환합니다. 이것은 디버깅에서 매우 유용하게 사용됩니다.

객체에 대한 문자열 표현은 전적으로 객체에 따라 달라집니다. 따라서 __repr__() 메소드는 재정의하여야 할 필요가 있습니다.

 

예를 들어서 Book 클래스의 경우에는 아래와 같이 __repr__() 메소드를 오버라이드할 수 있습니다.

class Book:
    def __init__(self, title, isbn):
        self.__title = title
        self.__isbn = isbn
    def __repr__(self):
        return "ISBN : " + self.__isbn + "; TITLE : " + self.__title

book = Book("The Python Tutorial", "0123456")
print(book)

 

<실행 결과>

ISBN : 0123456; TITLE : The Python Tutorial

 

__str__()메소드

__str__()도 __init__()처럼 object 클래스의 메소드입니다. __str__()은 객체의 문자열 표현을 반환합니다.

예를 들어서 시간을 나타내는 클래스 Time에서 __str__()은 아래와 같이 정의됩니다.

class Time:
    def __init__(self, hour, minute, second = 0):
        self.hour = hour
        self.minute = minute
        self.second = second
    def __str__(self): # 객체의 문자열 표현을 반환합니다.
        return '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second)

time = Time(10, 25)
print(time)

 

<실행 결과>

10:25:00

 

일반적으로 새로운 클래스를 작성할 때는 __str__() 도 작성하는 것이 디버깅에 도움이 됩니다.