본문 바로가기
python

python - 상속(inheritance)

by orangecode 2022. 4. 28.
728x90
상속 Inheritance

상속 Inheritance

 

부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게하는 것으로,

일부분 변경이 필요한 경우 자식클래스에서 해당 기능만 수정(정의)하여 사용할 수 있다.

python - 상속(inheritance)

상속이 없을 때

# 상속의 문법
class Class1(object):
    def method1(self):
        return 'm1'

c1 = Class1()
print(c1.method1())

## 상속이 없을 때 
class Class2(object):
    def method1(self):
        return 'm1'
    
    def method2(self):
        return 'm2'

c2 = Class2()
print(c2.method1())
print(c2.method2())

상속이 없을 때 class는 method1, method2를 하나하나 반복하고 있다.

 

method1은 'm1' 값만 return 시키고

 

method2는 'm2' 값만 return 시킨다.

 

상속이 있을 때

## 상속이 있을 때
class Class3(Class1): # class3 = class1의 기능을 가지고 method2의 기능을 추가함
    def method2(self):
        return 'm2'

c3 = Class3()
print(c3, c3.method1())
print(c3, c3.method2())

상속이 있을 때,

Class3Class1을 상속받아 method2, method1을 모두 실행할 수 있다.

 

print(c3, c3.method1())method1c3에서 실행하는데

 

method1은 Class3에서 발견할 수 없지만, Class3부모classClass1에서 method1을 발견하여 실행할 수 있다.

 

 

상속의 응용
### 상속의 응용
# 계산기 Cal
class Cal(object):

    def __init__(self, v1, v2): # v1, v2 : __init__내부에서만 사용가능한 지역변수
        if isinstance(v1, int): # isinstance : 매개변수 v1이 int 값인지 알아보는 함수 
            self.v1 = v1
        if isinstance(v2, int):
            self.v2 = v2  
    def add(self):
        return self.v1 + self.v2
    def subtract(self):
        return self.v1 - self.v2
    def setV1(self, v):
        if isinstance(v, int): # v = int 값인지 확인 True라면 실행, False 라면 무시
            self.v1 = v 
    def getV1(self):
        return self.v1

매개변수 v1, v2를 더하고 곱하는 계산기class Cal이다.

## CalMultiply
class CalMultiply(Cal): # Cal이 가진 모든 method를 상속받음
    def multiply(self):
        return self.v1*self.v2

c1 = CalMultiply(10,10)
print(c1.add())
print(c1.multiply())

 

계산기 class(Cal)을 class CalMultiply가 상속받는다.

 

CalMultiplymethodmuliplyv1 * v2v1과 v2를 곱해준다.

 

c1 = CalMultiply(10, 10)

 

class Cal의 매개변수 v1, v2으로 들어가서 

 

c1.add(10, 10) = 20

c1.multiply = 100 

 

값을 받을 수 있다.

 

 

+ 나눗셈 기능 추가(divide)

## CalMultiply
class CalMultiply(Cal): # Cal이 가진 모든 method를 상속받음
    def multiply(self):
        return self.v1*self.v2

class CalDivide(CalMultiply): # CalMultiply가 가진 모든 method를 상속받음
    def divide(self):
        return self.v1 / self.v2


c1 = CalMultiply(10,10) # c1은 Cal과 CalMultiply의 method를 모두 사용가능하다.
print(c1.add())
print(c1.multiply())

c2 = CalDivide(30, 10) # c2은 Cal, CalMultiply, CalDivide의 method를 모두 사용가능하다.
print(c2, c2.add())
print(c2, c2.multiply())
print(c2, c2.divide())

Class CalDivide(CalMultiply)

 

새로운 method인 divide(self)나누기self.v1 / self.v2를 사용할 수 있다.

 

 

Class CalDivide(CalMultiply)Class Cal, CalMultiply, CalDivide의 method를 모두 상속받아 사용할 수 있다.

 

 

    

반응형

댓글