■ 객체와 인스턴스의 차이
클래스에 의해서 만들어진 객체를 인스턴스라고 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까?
navi=cat() 이렇게 만들어진 navi는 객체이다. 그리고 navi라는 객체는 cat의 인스턴스이다.
즉, "navi는 객체", "navi는 cat의 인스턴스"라는 표현이 적절하다.
■ self는 class에 의해 생성된 instance를 지칭한다. 아래 예시의 경우 pey=Service()를 입력하는 순간 pey 인스턴스의 self는 pey를 지칭하게 된다.
▶ setname method()를 통해 self.name을 받을 경우
>>> class Service: ... secret = "영구는 배꼽이 두 개다" ... def setname(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.setname("홍길동") >>> pey.sum(1, 1)
아래와 같은 결과가 나온다.
홍길동님 1 + 1 = 2입니다.
▶ __init__ 를 통해 self.name을 받을 경우,
>>> 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)
아래와 같은 결과가 나오게 된다.
홍길동님 1 + 1 = 2입니다.
■ 메써드 오버라이딩(Overriding)
travel 함수를 다르게 설정하고 싶으면 동일한 이름의 travel 함수를 HouseKim 클래스 내에서 다시 구현하면 된다. 정말 간단하지 않은가! 이렇게 메서드 이름을 동일하게 다시 구현하는 것을 메서드 오버라이딩(Overriding)이라고 한다.
■ 연산자 오버로딩
class HousePark:
lastname = "박"
def __init__(self, name):
self.fullname = self.lastname + name
def travel(self, where):
print("%s, %s여행을 가다." % (self.fullname, where))
def love(self, other):
print("%s, %s 사랑에 빠졌네" % (self.fullname, other.fullname))
def fight(self, other):
print("%s, %s 싸우네" % (self.fullname, other.fullname))
def __add__(self, other):
print("%s, %s 결혼했네" % (self.fullname, other.fullname))
def __sub__(self, other):
print("%s, %s 이혼했네" % (self.fullname, other.fullname))
class HouseKim(HousePark):
lastname = "김"
def travel(self, where, day):
print("%s, %s여행 %d일 가네." % (self.fullname, where, day))
pey = HousePark("응용")
juliet = HouseKim("줄리엣")
pey.travel("부산")
juliet.travel("부산", 3)
pey.love(juliet)
pey + juliet
pey.fight(juliet)
pey - juliet
결과값은 예상한 대로 다음처럼 나올 것이다.
박응용, 부산여행을 가다.
김줄리엣, 부산여행 3일 가네.
박응용, 김줄리엣 사랑에 빠졌네
박응용, 김줄리엣 결혼했네
박응용, 김줄리엣 싸우네
박응용, 김줄리엣 이혼했네
< reference: https://wikidocs.net/28 >
'CAE > Enjoy Programming' 카테고리의 다른 글
matplotlib import 시, 에러 발생 대처방법 (0) | 2017.03.31 |
---|---|
#Python에서 #module 사용하기 (0) | 2016.03.26 |
Solve matrix equation Ax=b (0) | 2012.03.12 |
Interpolation 예제 - UnivariateSpline (0) | 2012.01.15 |
Notes on Python variable scope (0) | 2012.01.02 |