본문으로 바로가기

#Python #class에서 #self의 사용법

category CAE/Enjoy Programming 2016. 3. 26. 18:50

■ 객체와 인스턴스의 차이

클래스에 의해서 만들어진 객체를 인스턴스라고 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까?

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 >