질문이 있으십니까?

기본 컨텐츠 및 사용자가 직접 참여하여 만들어진 다양한 내용을 검색합니다.

7.5. 클래스.특별한 메소드들

__init__() #메서드(초기화)

# bookstore.py

class Book:

    def setData(self, title, price, author):
        self.title = title
        self.price = price
        self.author = author

    def printData(self):
        print '제목 : ', self.title
        print '가격 : ', self.price
        print '저자 : ', self.author

    def __init__(self):
        print '책 객체를 새로 만들었어요~'
>>> import bookstore
>>> b = bookstore.Book()  
책 객체를 새로 만들었어요~
>>> b.setData('누가 내 치즈를 먹었을까', '300원', '미키')
>>> b.printData()
제목 :  누가 내 치즈를 먹었을까
가격 :  300원
저자 :  미키
def __init__(self, title, price, author): #객체지향 언어에서는 생성자(constructor)라고 부른다.
        self.setData(title, price, author)
        print '책 객체를 새로 만들었어요~'
>>> reload(bookstore)
>>> b2 = bookstore.Book('내가 먹었지롱', '200원', '미니')
책 객체를 새로 만들었어요~

__del__() #메서드 (소멸자)

__init__ 메서드와 반대로 객체가 없어질 때 호출되는 메서드도 있습니다. 이런 것을 소멸자(destructor)라고 하는데, 파이썬에서는 __del__ 메서드가 소멸자의 역할을 맡고 있죠.

__repr__() #메서드 (프린팅)

이번엔 printData와 같은 메서드를 호출하는 대신, 파이썬의 기본문인 print 문을 사용해서 책 제목을 찍어보도록 하겠습니다. 이런 일을 가능하게 해주는 것은 바로 __repr__ 메서드이지요. 책 클래스에 아래와 같이 __repr__ 메서드를 추가해주세요.
def __repr__(self):
        return self.title
>>> b3 = bookstore.Book('나두 좀 줘', '100원', '쥐벼룩')  
책 객체를 새로 만들었어요~  
>>> print b3  
나두 좀 줘

__add__() #메서드 (덧셈)

# shape.py

class Shape:
    area = 0
    def __add__(self, other):
        return self.area + other.area
>>> a = shape.Shape()
>>> a.area = 20
>>> b = shape.Shape()
>>> b.area = 10
>>> a + b #클래스끼리 연산하면 __add__ 메서드 호출됨
30
>>> a.__add__(b)
30

__cmp__() #메서드 (비교)

def __cmp__(self, other):
        if self.area < other.area :
            return -1
        elif self.area == other.area :
            return 0
        else :
            return 1
>>> if c > d: 
...    print 'c가 더 넓어요~'
...
c가 더 넓어요~

__init__과 __call__ 차이?

class A:
  # 인스턴스 초기화 할 때 불러와지고
  def __init__(self):
    print('init')
  # 인스턴스가 호출됐을 때 실행
  def __call__(self):
    print('call')
# init은 객체 생성될 때 불러와짐
>>> a = A()
init====

# call은 인스턴스 생성될 때 불러와짐
>>> a()
call====
# 데코레이터는 자신이 수식할 함수나 메소드 내부에 받아 놓아야함
# 그러기 위해서 __init__메소드에 데이타 속성 저장
# 데코레이터 하는 일은 함수를 대리 호출해 줌
>>> class CuteDecorator:
>>>    def __init__(self,data):
>>>        self.storage = data
>>>    def __call__(self):
>>>        print('data entered :',self.storage.__name__)
>>>        self.storage()
>>>        print('data exited :',self.storage.__name__)

>>> @CuteDecorator
>>> def printer():
>>>    print('I print the empty space')
 
>>> print('---start---')
>>> printer()
---start---
data entered : printer
I print the empty space
data exited : printer

댓글을 작성하세요

문서 이력

  • 2020-06-07 날짜로 신달수 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-06-09 날짜로 신달수 님께서 등록 작업을 하였습니다.
  • 2020-06-13 날짜로 신달수 님께서 등록 작업을 하였습니다.