앎을 경계하기

Programming/Python

Python 클래스 상속

양갱맨 2019. 12. 26. 01:53
class HousePark:
    lastname = '박'
    def setname(self, name):
        self.fullname = self.lastname + name

    def travel(self, where):
        print("%s, %s 여행을 가다."%(self.fullname,where))
pey = HousePark()
pey.setname('응용')
pey.travel('제주도')
박응용, 제주도 여행을 가다.

 

pey = HousePark()
pey.travel('부산') # self.fullname 지정안해줘서 에러남
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-5-8e59ab12e050> in <module>
      1 pey = HousePark()
----> 2 pey.travel('부산') # self.fullname 지정안해줘서 에러남


<ipython-input-3-15af788ca34a> in travel(self, where)
      5 
      6     def travel(self, where):
----> 7         print("%s, %s 여행을 가다."%(self.fullname,where))


AttributeError: 'HousePark' object has no attribute 'fullname'

 

#클래스 변경
class HousePark:
    lastname = '박'
    def __init__(self, name):
        self.fullname = self.lastname + name

    def travel(self, where):
        print("%s, %s 여행을 가다."%(self.fullname,where))
pey = HousePark('응용')
pey.travel('부산')
박응용, 부산 여행을 가다.

 

클래스의 상속

class HouseKim(HousePark):
    lastname = '김'
juliet = HouseKim('줄리엣')
juliet.travel('제주도')
김줄리엣, 제주도 여행을 가다.

 

메서드 오버라이딩

오버라이딩 : 상속 대상 클래스의 멤버메소드와 이름은 같지만 다른 연산을 하는 메소드 정의

오버로딩 : 같은 함수의 이름을 가지지만 매개변수 타입이 다르거나 개수가 달라야한다.

class HouseKim(HousePark):
    lastname = '김'
    def travel(self, where, day):
        print("%s, %s여행 %d일 간다."%(self.fullname, where, day))
juliet = HouseKim('줄리엣')
juliet.travel('제주도') # 오버라이딩했기때문에 재정의한 메서드에 맞춰서 사용해야한다.
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-18-4f70c6482a54> in <module>
      1 juliet = HouseKim('줄리엣')
----> 2 juliet.travel('제주도') # 오버라이딩했기때문에 재정의한 메서드에 맞춰서 사용해야한다.


TypeError: travel() missing 1 required positional argument: 'day'

 

juliet.travel('제주도',3)
김줄리엣, 제주도여행 3일 간다.

 

pey = HousePark("응용")
juliet = HouseKim("줄리엣")
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 __add__(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.love(juliet)
pey+juliet #연산자 오버로딩
박응용, 김줄리엣 사랑에 빠졌네
박응용, 김줄리엣 결혼했네

'Programming > Python' 카테고리의 다른 글

Python 내장 함수  (0) 2019.12.26
Python 예외 처리  (0) 2019.12.26
Python 클래스  (0) 2019.12.26
Python 파일 입출력  (0) 2019.12.26
Python 사용자 입력, 출력  (0) 2019.12.26