클래스


#!/usr/bin/python3
# 클래스
# by Elex (http://python.elex.pe.kr/)


class Dog:
    # 생성자
    def __init__(self, name, color= 'white'):
        self._name = name
        self._color = color
   
    # 메서드
    def bark(self):
        print('{}(이)가 짖는다. "멍멍"' .format(self ._name))       
    def walk(self):
        print('{}(이)가 걷는다. "슬금슬금"' .format(self ._name))
   
    # 겟터와 셋터 메서드
    def getName(self):
        return self._name       
    def getColor(self):
        return self._color   
    def setColor(self, color):
        self._color = color
 
       
def main():
    dog1 = Dog('땡칠')
    dog1.bark()  
    dog1.setColor( 'black')
    print(dog1.getColor())
   
if __name__ == "__main__": main()


클래스의 인스턴스 생성시에 실행되는 __init__()이라는 생성자 메서드도 있고, 또 인스턴스가 메모리에서 해제될 때 실행되는 __del__()이라는 파괴자 메서드도 있다.



파이썬에서는 키워드리스트 매개변수를 사용해서 겟터와 셋터를 좀 더 일반화시킨 형태의 코드가 많이 쓰인다.
#!/usr/bin/python3
# 클래스
# by Elex (http://python.elex.pe.kr/)


class Cat:
    # 생성자
    def __init__(self, **kwargs):
        self._vars = kwargs
   
    # 메서드
    def getProperty(self, key):
        return self._vars.get(key, None)       
    def setProperty(self, key, val):
        self._vars[key] = val
 
       
def main():
    cat1 = Cat()
    cat1.setProperty( 'color', 'red' )
    print(cat1.getProperty( 'color'))
   
if __name__ == "__main__": main()





파이썬에서 클래스를 상속하려면, 클래스 이름 뒤에 괄호 안에 부모 클래스를 적어주면 된다. 부모 클래스의 멤버를 사용하려면 super()를 사용한다.

#!/usr/bin/python3
# 클래스
# by Elex (http://python.elex.pe.kr/)

class Animal:
    def walk(self): print('걷는다.' )
    def talk(self): print('말한다.' )
   
class Dog(Animal):
    def walk(self):
        print('개가' , end=' ')
        super().walk()
    def balk(self):
        print('개가 짖는다.' )

class Human(Animal):
    pass
       
def main():
    dog1 = Dog()
    dog1.walk()
    human1 = Human()
    human1.walk()
   
if __name__ == "__main__": main()




아래의 소스코드는 range() 함수와 비슷한 역할을 수행한다. 다만, range() 함수는 끝 값을 포함하지 않는 반면, 이 클래스는 끝 값도 포함하도록 작성되었다. 이전 글에서 작성했던 함수 버전과 동일한 기능을 하지만 이번에는 클래스 버전이다. 

#!/usr/bin/python3
# 레인지 함수와 유사하지만, 끝 값도 포함한다.
# by Elex (http://python.elex.pe.kr/)


def main():
    for i in iRange(0 , 10, 2):
        print(i, end=' ')
  
class iRange():
    def __init__(self, *args):       
        # 매개변수의 갯수 따라 start, stop, step 변수에 값을 할당한다.
        lengthOfArgs = len(args) # 매개변수의 길이
        if lengthOfArgs < 1 :
            raise TypeError('매개변수가 하나도 없네')
        elif lengthOfArgs == 1 : # 매개변수가 하나인 경우엔,
            self.start = 0
            self.stop = args[ 0]
            self.step = 1
        elif lengthOfArgs == 2 : # 매개변수가 둘인 때에는,
            ( self.start, self .stop) = args
            self.step = 1
        elif lengthOfArgs == 3 : # 매개변수가 셋인 경우에는,
            ( self.start, self .stop, self.step) = args
        else:
            raise TypeError('매개변수가 {}개라니. 너무 많네'.format(lengthOfArgs))
  
    def __iter__(self):
        # 값을 증감시키면서 하나씩 반환한다.
        i = self.start
        while i <= self.stop:
            yield i
            i += self.step
  
if __name__ == "__main__": main()




댓글

이 블로그의 인기 게시물

값의 표현

변수, 객체, 그리고 값

정규표현식