kkuzil.own@gmail.com

Posted
Filed under Development/Python

Python Class


파이썬의 클래스는 c++의 클래스와는 다른점이 많다..
개념적으로 비슷한 부분도 있지만 다른 부분도 있다(아.. 정리안되..-ㅁ-;;)
아무튼..! 기본적 개념은 같다-_-;;


클래스 정의 및 인스턴스 객체 생성



클래스 정의 단계

>>> Class Simple:      # 헤더(header)
>>>   pass          # 몸체(body)

객체 생성 단계
>>> s1 = Simple()
>>> s2 = Simple()


※ 파이썬 클래스의 특징 : 동적으로 멤버변수를 선언할수 있다.


>>> s1.stack = []

>>> s1.stack.append(1)

>>> s1.stack.append(2)

>>> s1.stack.append(3)

>>> s1.stack

[1, 2, 3]

>>> s1.stack.pop()

3


* 클래스에서 맴버 함수 정의법

기존의 함수와 정의 하는 방법(def)은 갖지만 다른점은 첫 번째 인자로 자신을(self)을 준다는 것이다.


>>> class Myclass:

>>>   def set(self, v):

>>>     self.value = v

>>>   def put(self):

>>>     print self.value;


>>> c = Myclass()

>>> c.set('egg')

>>> c.put()

egg


위 코드는 다음 코드와 동일하다


>>> Myclass.set(c, 'egg')

>>> Myclass.put(c)

egg


메쏘드를 인스턴스 캑체를 이용하여 직접 호출할 때에는 첫 번째 인수인 self는 없다고 생각하면된다.

(기존의 다른언어에서 쓰던것 처럼)

이와같이 클래스 객체를 이용하여 메쏘드를 호출하는 것을 언바운드 클래스 메쏘드 호출 이라고 하고, 인스턴스를 통하여 자동으로 self인수를 전달하는 방식을 인스턴스 메쏘드 호출 이라고 한다.


* 클래스 내부에서의 메쏘드 호출


>>> class MyClass2:

>>>   def set(self, v):

>>>     self.value = v

>>>   def incr(self):

>>>     self.set(self.value + 1) # 내부 메쏘드 호출

>>>   def put(self):

>>>     print self.value


* 생성자와 소멸자

파이썬의 생성자는 __init__이고 소멸자는 __del__이다

(일반적으로 파이썬은 어떤 이름 앞뒤로 _가 두 개씩 붙어 있으면 예약어 이다)


from time import time, ctime, sleep


class Life:

  def __init__(self):

    self.birth = ctime()

    print 'Birthday', self.birth

  def __del__(self):

    mylife = life()

    print 'Sleeping for 3 sec'

    sleep(3)


test()


결과

Birthday Tue Aug 15 10:49:44 2000

Sleeping for 3 sec

Deatday Tue Aug 15 10:49:47 2000


* 연산자 중복(operator over loading)


class MyString:

  def __init__(self, str):

    self.str = str

  def __div__(self, sep):      # 나누기 연산자 /가 사용될때 호출되는 함수

    return self.str.split(sep)   # 문자열 self.str을 sep를 기준으로 분리


>>> m = MyString("abcdabcdabcd")

>>> print m / "b"            # 문자열을 ‘b’를 이용해서 리스트로 분리한다.

['a', 'cda', 'cda', 'cd']


>>> print m / "bc"           # 문자열을 “bc”를 이용해서 리스트로 분리한다.

['a', 'da', 'da', 'd]


수치 연산에 적용되는 주요 연산자는 __div__외에도 많이 있다

너무 많아서 기록 하지는 못한다는.. 책에서 참고~

2010/07/22 15:53 2010/07/22 15:53