본문 바로가기
Language/Python

[Python] Extends / super

by 별토끼. 2017. 8. 16.
반응형

[Python] Extends / super

  • Extends 상속

 - python에서 상속은 class 클래스명(상속받을 클래스명)으로 작성해준다.

 - 28 : 메소드 재정의(오버라이딩)

 - 40 : HandPhone에서 call메소드를 정의하지 않았어도 상속으로 인해 이용할 수 있다.


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
#-*- 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만 화소의 사진을 찍어요"
        
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()
    phone3 = SmartPhone()
    
    phone1.call()
    print "-----"
    phone2.call()
    phone2.mobileCall()
    phone2.takePicture()
    print "-----"
    phone3.takePicture() #오버라이드한 메소드
cs



  • super
 - 상속받은 부모 클래스의 생성자를 호출하려면 
 1. 클래스명.__init__()
 2. super(현재클래스명, self).__init__()
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
#-*- 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


  • Lamda함수
 - python에서는 함수도 객체이므로 담을 수 있다.
 - 변수에 담은 후 ()를 붙이면 함수 호출
 - 9 : 전달된 인자를 함수로 간주한 후 호출할 수 있다.
 - 53 : lamda함수를 만들어 변수에 담을 수 있다.
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
55
56
#-*- coding: utf-8 -*-
'''
    - lambda 함수 익히기
'''
 
def printHi():
    print "hi hi hi"
 
def useFunction(f):
    # 전달된 인자를 함수로 간주하고 함수 호출하기 
    f()
    print u"useFunction() 함수가 리턴 합니다."
 
# 인자로 전달받은 두수의 합을 리턴해주는 함수 
def getSum(x, y):
    return x+y
 
if __name__ == '__main__':
    # main 으로 실행했을때 실행순서가 들어오는곳 
    
    # python 에서는 함수도 객체이므로 변수에 담을수 있다.
    
    # 함수 호출 
    printHi()
    # 함수를 참조해서 변수에 대입 
    a = printHi
    # 변수에 대입된 함수의 참조값을 이용해서 함수 호출 가능
    a()
    
    print "-------"
    # 함수를 호출하면서 함수의 참조값 전달하기
    useFunction(a)
    
    print "----"
    
    result = getSum(1010)
    print "result :",result
    
    print "lambda 함수 정의해서 사용하기"
    '''
        (lambda x, y: x+y)(10, 10)
        
        는 javascript 에서 
        
        (function(x,y){ return x+y; })(10, 10)
        
        과 같다 
    '''
    print "lambda 함수 사용 결과:" ,\
        (lambda x, y: x+y)(1010)
    
    # lambda 함수 만들어서 참조값 변수에 담기 
    myLam = lambda x, y: x*y
    
    print "myLam(10, 10) : ", myLam(1010)
    
cs




반응형

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

[Python] Except / File  (0) 2017.08.17
[Python] Decorator  (0) 2017.08.16
[Python] Main / class / 생성자 / return  (1) 2017.08.16
[Python] 정규표현식(Regulation Express) / input  (0) 2017.08.16
[Python] if / for / while / operator  (0) 2017.08.10

댓글