반응형
SMALL
상속
class 클래스명(상속받을 클래스명)
pass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #-*- coding: utf-8 -*- ''' 상속 class 클래스명(상속받을 클래스명) pass ''' class Phone(object): # 전화 거는 기능 def call(self): print u"전화를 걸어요" # Phone 클래스를 상속받아서 클래스 정의하기 class HandPhone(Phone): # 이동중에 전화를 거는 메소드 def mobileCall(self): print u"이동중에 전화를 걸어요" # 사진 찍는 기능 def takePicture(self): print u"100 만 화소의 사진을 찍어요" # HandPhone 클래스를 상속받아서 클래스 정의하기 class SmartPhone(HandPhone): # 인터넷을 하는 기능 def doInternet(self): print u"웹 서핑을 해요" # 사진 찍는 기능 재정의 def takePicture(self): print u"1000 만 화소의 사진을 찍어요" if __name__ == '__main__': # Phone 객체 생성해서 참조값을 phone1 이라는 변수에 담기 phone1 = Phone() # HandPhone 객체 생성해서 참조값을 phone2 라는 변수에 담기 phone2 = HandPhone() # SmartPhone 객체 생성해서 참조값을 phone3 라는 변수에 담기 phone3 = SmartPhone() phone1.call() print "-----" phone2.call() phone2.mobileCall() phone2.takePicture() print "-----" phone3.call() phone3.mobileCall() phone3.doInternet() phone3.takePicture() | cs |
클래스 명 옆에 아무것도 적지 않으면
묵시적으로 object 상속 받은것과 같음
그래서 object 를 적어 준 것임
핸드폰 클래스는 폰 클래스를 상속 받고
핸드폰 클래스는 여기에 작성한 이동중에 전화거는 기능, 사진찍는 기능이 있고
폰클래스를 상속받았으니 그냥 전화거는 기능도 있어
스마트폰 클래스는 핸드폰 클래스를 상속 받았어
스마트폰 클래스는 여기 작성한 인터넷을 하는 기능, 사진 찍는 기능이 있고
핸드폰 클래스를 상속받았으니
핸드폰 클래스와 폰 클래스의 기능들도 있어
사진찍는 기능은 핸드폰 클래스에도 있는데 스마트폰이 핸드폰 클래스를 상속받아서
재정의 했기에 100만 화소가 아닌 1000만 화소로 출력되는 것을 확인할수 있다.
상속받은 부모 클래스의 생성자 호출하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #-*- coding: utf-8 -*- ''' - 상속받은 부모 클래스의 생성자 호출하는 방법 1. 클래스명.__init__() 2. super(현재클래스명, self).__init__() ''' class Car(object): #가상의 엔진 engine=None #생성자 def __init__(self, engine): self.engine=engine #기능 def drive(self): if self.engine==None: print "엔진이 없어서 달릴수가 없어요" else: print "달려요" class SuperCar(Car): #생성자 def __init__(self, engine): #부모생성자(Car 생성자) 로 필요한 값을 넘겨준다. #super(SuperCar, self).__init__(engine) # phthon 2.7 문법 Car.__init__(self, engine) def driveFast(self): if self.engine==None: print u"엔진 객체가 없어서 달릴수가 없어요" else: print u"엄청 빨리 달려요!" if __name__ == '__main__': Car(u"엔진").drive() Car(None).drive() print "-----" SuperCar(u"엔진").driveFast() SuperCar(None).driveFast() | cs |
42번째 line 에 None 대신에 u"엔진" 을 코딩해 주면
------
엄청 빨리 달려요!
엄청 빨리 달려요!
이렇게 출력 됨.
자식생성자에서 부모 생성자를 호출하는 방법이 2가지 있어
1. super(SuperCar, self).__init__(engine)
2. Car.__init__(self, engine)
반응형
'FrameWork > Python' 카테고리의 다른 글
파이썬 Decorator (0) | 2017.08.10 |
---|---|
파이썬 lambda (2) | 2017.08.10 |
파이썬 Class (0) | 2017.08.10 |
파이썬 main (0) | 2017.08.10 |
파이썬 정규표현식 (0) | 2017.08.09 |