클래스
#!/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()
댓글
댓글 쓰기