요즘 은근히 바쁜척하면서 지내고 있답니다. 뭔가 더 재미난 것이 없을까 계속 찾는 걸로 봐서는 저는 하나에 집중하는 것보다 뭔가 계속 새로운 것에 흥미를 느끼는 스타일인 모양입니다. 몇일전에는 멀리서 지도교수님이 제가 있는 판교까지 찾아와주셔서 살짝 학교의 향기를 느낄 수 있었네요.^^. 오늘은 요즘 제가 보고 있는 몇몇 주제들 중에 Python에서 class를 사용하는 것에 대해 이야기를 할려고 합니다. 뭐 거창하게 class의 가치나 역할 등등을 이야기할 것은 아니구요. 그냥 예제 하나를 통해서 설명할려구요^^
Python에서 클래스의 구조는 위와 같은 것이 일반적인 구조입니다. class를 선언하고... 내부에 변수나 함수를 선언하는 것이지요. 내부에서 인자로 self를 사용하는 것과 __init__ 함수의 선언 등이 좀 필요하지만... 뭐 심플한 예제를 다룰 거니 (사실 모르기도 하구요^^) 간단히... __init__에는 그 클래스에서 사용할 초기 변수를 선언해 두면 됩니다. 여기서 **kwargs는 [바로가기]에서 이야기한 keywarded argument입니다.
import numpy as np import matplotlib.pyplot as plt class sinWaveForm: def __init__(self, **kwargs) : self.endTime = kwargs.get('endTime', 1) self.sampleTime = kwargs.get('sampleTime', 0.01) self.amp = kwargs.get('amp', 1) self.freq = kwargs.get('freq', 1) self.startTime = kwargs.get('startTime', 0) self.bias = kwargs.get('bias', 0) def calcDomain(self) : return np.arange(0.0, self.endTime, self.sampleTime) def calcSinValue(self, time) : return self.amp * np.sin(2*np.pi*self.freq*time + self.startTime) + self.bias def plotWave(self) : time = self.calcDomain() result = self.calcSinValue(time) plt.plot(time, result) plt.grid(True) plt.xlabel('time') plt.ylabel('sin') plt.show() if __name__ == "__main__" : test = sinWaveForm(amp = 2, endTime = 1) test.endTime = 2 print(test.calcDomain()) print(test.calcSinValue(test.calcDomain())) test.plotWave()
위에서 보여주는 예는 삼각함수를 그리는 아까의 이전 글을 클래스로 바꿔본 심플한 예입니다. 내부 변수는 domain인 시간을 만드는 calcDomain함수와 그 시간으로 사인함수의 결과를 만드는 calcSinValue와 그림을 그려주는 plotWave함수가 있습니다. 뭐 크게 어려움 없는 부분이구요. 마지막 if __name__ == "__main__" 구문은 이 class가 있는 화일이 단독으로 실행되는지 다른 코드에서 호출된 것인지를 체크하는 구문입니다^^
import matplotlib.pyplot as plt import sinClass # test1 = sinClass.sinWaveForm(amp = 1, endTime = 1) # test1.plotWave() test2 = sinClass.sinWaveForm(amp = 1, freq=1, endTime = 5) test3 = sinClass.sinWaveForm(amp = 1, freq=4, endTime = 5) time = test2.calcDomain() resultTest2 = test2.calcSinValue(time) resultTest3 = test3.calcSinValue(time) plt.plot(time, resultTest2, time, resultTest3, time, resultTest2+resultTest3) plt.grid(True) plt.xlabel('time') plt.ylabel plt.show()
위에서는 방금 만든 class를 사용하는 예제인데요. 다른 주기의 삼각함수와 그 두 함수를 더한 결과도 보여주게 됩니다.
바로 그 결과가 위의 그림입니다.^^ 뭐 아무것도 아닌 글입니다만.... 제 블로그 습관이 어떤 대화나 글을 적기 위해 항상 링크를 걸면서 참조를 하는 것을 좋아하기 때문이죠^^.
'Software > Python' 카테고리의 다른 글
Python에서 XML 다루기 (몹시 초보용) (18) | 2015.03.05 |
---|---|
Win8에서 IPython Notebook 사용하기 (20) | 2015.02.27 |
Python에서 수행해 본 간단한 FFT 코드 (38) | 2015.02.09 |
Python 함수 def에서 유용하게 사용할 수 있는 **kwargs : keywarded argument list (12) | 2015.01.26 |
Python에서 Open Dynamics Engine을 이용한 Two Link Pendulum 시뮬레이션 (20) | 2014.11.12 |
Python에서 간단하게 진자 운동 시뮬레이션을 애니메이션으로 구현하기 (21) | 2014.10.31 |
Python에서 화일로 저장된 데이터를 Plot하는 간단한 예제 (16) | 2014.10.29 |