Life is too short, You need python
파이썬 프로그래밍의 핵심, 클래스
C언어에는 클래스가 없다. 즉, C언어는 클래스가 없어도 프로그램을 충분히 만들 수 있으나 요즘 새롭게 등장하는 언어들은 클래스를 포함하고 있다. 객체지향언어의 최대 장점 클래스에 대해서 포스팅을 하겠다.
result=0
def adder(num):
global result
result +=num
return result
계산기의 더하기기능을 구현한 것이다.
그런데 만약 계산기가 2개 필요할 경우 각각의 계산기는 각각의 결과값을 유지해야하기 때문에 위와 같이
adder함수 하나만으로는 부족하다.
result1=0
result2=0
def adder1(num):
global result1
result1 += num
return result1
def adder2(num):
global result2
result2 += num
return result2
따라서 이렇게 계산기1의 결과값이 계산기2에 아무런 영향을 끼치지 않음을 학인할 수 있으나
계산기가 꼭 2개가 필요한 경우만 존재하는 것은 아니다. 또한 늘어날 때 마다 함수를 추가하고 전역변수를 선언할 수는 없다. 10개를 넘어 무수히 많은 계산기능이 필요한 경우는 존재한다.
그런 경우 클래스를 통해 쉽게 해결할 수 있다.
class Calculator:
def __init__(self):
self.result=0
def adder(self,num):
self.result+=num
return self.result
cal1=Calculator()
cal2=Calculator()
print(cal1.adder(3))
print(cal1.adder(4))
print(cal2.adder(3))
print(cal2.adder(7))
>>>3
7
3
10
클래스 : 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면 같은 것이라고 생각하면되고
인스턴스 : 클래스에 의해서 만들어진 산출물이라고 생각하면 된다.
class simple: #클래스 생성
pass
a=simple() #인스턴스 생성
두번째 예
class Service:
secret="영구는 두개"
def __init__(self,name): #인스턴스를 만들때 항상 실행된다.
self.name=name
def sum(self,a,b):
result=a+b
print("%s님 %s+%s=%s입니다."%(self.name,a,b,result))
pey=Service("홍길동")
pey.sum(1,1)
여기서 pey=Service("홍길동") 를 통해 class Service를 실행해서 함수에 값까지 입력을 했다.
__init__은 클래스를 실행할때 필수적으로 입력을 해야하는 값이다. 즉, "인스턴스를 만들 때 항상 실행된다."
따라서 def __init__(self,name) self=pey, name=홍길동이 입력이 된다.
여기서 self는 ID로 생각해두면 될거같다. Service안에 있는 함수를 사용할때 이 클래스에 선언된 것이 있는지 확인할때 self가 요구된다. 따라서 class의 함수를 사용하기 위해서는 self가 필수적이다.
클래스의 구조
class 클래스 이름[(상속 클래스명)]:
<클래스 변수 1>
<클래스 변수 2>
...
<클래스 변수 N>
def 클래스 함수1(self,[인수1,인수2,,,,])
<수행할 문장1>
<수행할 문장2>
....
def 클래스 함수2(self,[인수1,인수2,,,,])
<수행할 문장1>
<수행할 문장2>
....
def 클래스 함수N(self,[인수1,인수2,,,,])
<수행할 문장1>
<수행할 문장2>
....
....
클래스를 만들기 전에는 어떻게 만들 것인지 구상하는 것이 좋다.
세번째 예시
사칙연산을 하기위한 클래스
사칙연산을 하려면 두 숫자를 받아야한다.
더하기, 빼기, 곱하기, 나누기 기능을 가진 클래스 구현
class FourCal():
def setdata(self,first,second):
self.first=first
self.second=second
def sum(self):
result=self.first+self.second
return result
def sub(self):
result=self.first-self.second
return result
def div(self):
result=self.first/self.second
return result
def mul(self):
result=self.first*self.second
return result
a=FourCal()
a.setdata(4,2) FourCal.setdata(a,4,2)로도 호출 가능
print(a.first)
>>>4
print(a.second)
>>>2
print(a.sum())
>>>6
print(round(a.div()))
print(a.mul())
print(a.sub())
이와같이 a변수에 FourCal클래스를 호출하고 a.setdata로 first,second데이터의 변수를 저정하며
사칙연산을 실행한다.