[객체와 인스턴스의 차이]
클래스에 의해서 만들어진 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 이렇게 생각해 보자. kim = Programmer() 이렇게 만들어진 kim은 객체이다. 그리고 kim이라는 객체는 Programmer의 인스턴스이다. 즉, 인스턴스라는 말은 특정 객체(kim)가 어떤 클래스(Programmer)의 객체인지를 관계 위주로 설명할 때 사용된다. 즉,"kim은인스턴스" 보다는"kim은객체"라는 표현이 어울리며,"kim은Programmer의 객체" 보다는"kim은Programmer의 인스턴스"라는 표현이 훨씬 잘 어울린다.
class Service:
secret = "today is monday"
#setup class
pey = Service()
#signup class
print(pey.secret)
today is monday
class Service:
secret = "today is monday"
#setup class
pey = Service()
#signup class
print(pey.secret)
Service.secret = "today is friday"
print(pey.secret)
today is monday
today is friday
class Service:
secret = "today is monday"
def sum(self, a, b):
result = a + b
print("%s + %s = %s" % (a, b, result))
#setup class
pey = Service()
#signup class
print(pey.secret)
print(pey.sum(3,4))
today is monday
3 + 4 = 7
pey.sum(pey, 1, 1)
sum 함수는 첫 번째 입력값을 가지고 가입한 사람인지 아닌지를 판단한다. 따라서 첫 번째 입력 인수로 pey라는 아이디를 주면 sum 함수는 pey라는 아이디가 이미 가입되어 있는 것을 확인한 후 서비스를 제공해 줄 것이다.
그런데 이전에 sum 함수를 호출할 때는 아래 문장처럼 pey를 따로 전달하여 사용하지 않아도 문제가 없었다. 왜 그럴까?
>>> pey.sum(1, 1)
pey.sum(1, 1)이라는 호출이 발생하면 sum함수의 첫번째 인수인 self에는 호출 시 이용했던 객체(즉, pey라는 아이디)가 자동으로 전달된다. 이러한 이유로 pey.sum(pey, 1, 1)이 아닌 pey.sum(1, 1)으로 사용해야만 하는 것이다.
(※ pey.sum(1, 1)은 Service.sum(pey, 1, 1)처럼 사용해도 동일한 결과를 얻는다.)
class Service:
secret = "today is monday"
def setname(self,name):
self.name = name
def sum(self,a,b):
result = a + b
print("hey %s, %s + %s = %s" % (self.name, a, b, result))
pey = Service()
#signup
pey.setname("lako")
print(pey.sum(3,4))
hey lako, 3 + 4 = 7
None
알아두기
위에서 알아본 다음과 같은 문장이 바로 객체 변수를 생성하는 문장이다.
pey.name = "홍길동"
객체 변수는 다음과 같이 생성할 수 있다.
객체.객체변수 = 값
클래스 변수가 객체간 서로 공유되는 변수라면 객체 변수는 객체별로 고유한 값이 저장되는 변수이다.
다음과 같은 코드를 작성해 보자.
>>> kim = Service()
>>> park = Service()
>>> kim.name = "김철수"
>>> park.name = "박응용"
kim객체와 park객체에 name이라는 객체 변수를 생성했다.
그리고 다음과 같이 객체 변수값을 출력해 보자.
>>> print(kim.name)
김철수
>>> print(park.name)
박응용
여기서 주목해야 할 점은 kim객체의 name에 "김철수"라는 값을 저장하고 park객체의 name에 "박응용"이라는 값을 저장하더라도 kim객체의 name값이 변하지 않는다는 점이다. (즉, 객체 변수의 값은 객체별로 고유하게 유지된다.)
class Service:
secret = "howdo you do?"
def __init__(self, name):
self.name = name
def sum(self, a, b):
result = a + b
print("hey %s, %s + %s = %s" % (self.name, a, b, result))
pey = Service("lako")
print(pey.sum(1, 1))
class 클래스이름[(상속 클래스명)]:
<클래스 변수 1>
<클래스 변수 2>
...
def 클래스함수1(self[, 인수1, 인수2,,,]):
<수행할 문장 1>
<수행할 문장 2>
...
def 클래스함수2(self[, 인수1, 인수2,,,]):
<수행할 문장1>
<수행할 문장2>
...
...
class FourCal:
pass
a = FourCal()
type(a)
(※ type 함수는 파이썬이 자체적으로 가지고 있는 내장 함수로 객체의 타입을 출력한다.)
class Cat:
def __init__(self, name):
self.name = name
def meow(self):
print('%s meow~' % self.name)
젬스 클래스 강의
#encoding: utf8
class FourCal:
def setdata(self, first, second): #메서드의 입력 인수
self.first = first #메서드수행문
self.second = second #메서드수행문
def sum(self):
result = self.first + self. second
return result
def mul(self):
result = self.first * self. second
return result
def div(self):
result = self.first / self. second
return result
def sub(self):
result = self.first - self. second
return result
a = FourCal()
a.setdata(3,5)
print(a.mul())