본문 바로가기

프로그램언어/python

Chap01

 파이선 생성자와 파괴자

파이선에 초기화는 class에 초기화 설정을 하여 초기화를 꾀할 수 있다.

 #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, title, price, author):
        self.setData(title,price,author)
        print 'a new Books for now'

기초적인 크랠스의 (1)__init__  하는 부분이 초기화 부분이라 할 수 있다.

이와함께 생성자가 있다면, 소멸자도 반드시 존재 하듯이 (2)__del__() 메소드와 반대로 객체가 없어질 때 호출되는 메소드가 필요하다.

이런 것을 '소멸자(destructor)'라고 하는데 파이썬에서는 __del__() 메소드가 소멸자의 역할을 한다. (3)__repr__() 메소드(프린팅)

이번에는 printData()와 같은 메소드를 호출하는 대신에 파이썬의 기본문인 print문을 사용해서 책 제목을 출력해 보도록 하겠다. 이런 일을 가능하게 해주는 것은 바로 `__repr__()메소드이다.


def __repr__(self):

return self.title


두 도형의 넓이를 더하는 __add__() 메소드를 만들어 보면은 두 객체를 self와 other를 인자로 받아서 그 둘의 넓이를 더한 값으 돌려주는 이을 알아보면은

 #shape.py

class Shape:
    area = 0

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

>>> import shape
>>> a = shape.Shape()
>>> a.area = 120
>>> b = shape.Shape()
>>> b.area = 1
>>> a + b
121

이와 같이 특별한 메소드를 사용해서 연산자가 하는 일을 정의하는 것을 '연산자 중복(overload)' 이라고 부릅니다. 연산자 중복을 이용하면 사용자가 직접 만든 클래스의 객체에 대해서도 연산자를 사용할 수 있다.


(5)__cmp__() 메소드 (비교)

비교 연산자 ( <, >, == )를 쓸 수 있도록 해 주는 메소드를 살펴보면서 정리를 하도록 하겠습니다.

Shape 클래스에 아래와 같이 __cmp__() 메소드를 추가해 준다.


파일을 읽어들어 라인별루 찍어 내기

반복자를 이용하여 파일을 읽어들여 프린트 문장으로 찍어 내는 문장을 흉내내보자

f = open('news.txt')

f = iter(f)

#i.next()

for m in f:

    print m


반복자 클래스 직접 만들기

1, 2, 3, 4, .. 와 같이 0보다 큰 정수를 자연수라고 하지요. 자연수는 무한히 큰 집합입니다. 리스트를 이용해서 무한히 큰 자연수를 집합을 만들 수 있을까요? 이렇게 하면?


이 글은 스프링노트에서 작성되었습니다.