English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 기본 강의

Python 흐름 제어

Python 함수

Python 데이터 타입

Python 파일 작업

Python 객체와 클래스

Python 날짜와 시간

Python 고급 지식

Python 참조 매뉴얼

Python 상속

상속은 부모 클래스의 모든 기능을 继承할 수 있는 클래스를 정의하고 더 많은 기능을 추가할 수 있게 합니다. 이 문서에서는 Python에서 상속을 사용하는 방법을 배울 것입니다.

상속이란 무엇인가요?

상속은面向对象编程의 강력한 기능 중 하나입니다.

그것은 새로운클래스며, 기존 클래스에 대해 거의 수정이나 수정이 없습니다. 새 클래스는파생(자) 클래스而从 그것을 继承한 새 클래스는기본(부) 클래스.

Python 상속 문법

class BaseClass:
  # 기본 클래스의 주체
class DerivedClass(BaseClass):
  # 파생 클래스의 주체

파생 클래스는 기본 클래스에서 요소를 继承하고 새 요소를 추가합니다. 이는 코드의 재사용성을 높입니다.

Python 상속 예제

상속의 사용을 보여주기 위해 예제를举겠습니다.

다边形은 다음과 같습니다3개나 더 많은 변을 가진 닫힌 도형입니다. 예를 들어, Polygon이라는 이름의 클래스가 있습니다. 다음과 같이 정의되어 있습니다.

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]
    def inputSides(self):
        self.sides = [float(input("쪽 길이 입력 "))+str(i+1)+" : ")) for i in range(self.n)]
    def dispSides(self):
        for i in range(self.n):
            print("쪽 길이",i+1,"은",self.sides[i])

이 클래스는 데이터 속성을 가지고 있으며, 쪽 수, 쪽개수및 각 쪽의 크기를 리스트로, 즉쪽 수.

메서드 inputSides()는 각 쪽의 크기를 가져오고, dispSides()는 그들을 올바르게 출력합니다.

삼각형은3쪽의 다각형입니다. 따라서 Polygon에서 Triangle를 상속받은 클래스를 만들 수 있습니다. 이는 Triangle에서 Polygon에 있는 모든 속성을 쉽게 사용할 수 있게 합니다. 다시 정의할 필요가 없습니다(코드 재사용성). Triangle는 다음과 같이 정의됩니다.

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)
    def findArea(self):
        a, b, c = self.sides
        # 半경계 계산
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('삼각형의 면적은 %0.2f'%area'

하지만, class Triangle는 삼각형의 면적을 찾고 출력하는 메서드인 findArea()를 가지고 있습니다. 이는 예제 실행입니다.

>>> t = Triangle()
>>> t.inputSides()
쪽 길이 입력 1 : 3
쪽 길이 입력  2 : 5
쪽 길이 입력  3 : 4
>>> t.dispSides()
쪽 길이 1 는 3.0
쪽 길이 2 는 5.0
쪽 길이 3 는 4.0
>>> t.findArea()
삼각형의 면적은 6.00

우리는 클래스 Triangle에 inputSides()나 sides()와 같은 메서드를 정의하지 않았지만, 그들을 사용할 수 있습니다.

기본 클래스에서 속성을 찾지 못하면, 기본 클래스를 검색하여 계속 합니다. 기본 클래스 자체가 다른 클래스에서 파생된 경우, 재귀 방식으로 이 작업을 반복합니다.

파이썬에서의 메서드 오버라이딩

위 예제에서는 Triangle와 Polygon 두 개의 클래스에서 __init__() 메서드가 정의되어 있습니다. 이 경우, 파생 클래스의 메서드는 기본 클래스의 메서드를 대체합니다. 즉, Triangle의 __init__()는 Polygon의 __init__()보다 우선합니다.

일반적으로, 기본 메서드를 대체하는 경우, 우리는 단순히 대체하는 대신 확장 정의를 선호합니다. 이를 위해, 파생 클래스에서 기본 클래스의 메서드를 호출하여 같은 작업을 수행합니다. 예를 들어, Triangle에서 __init__()를 호출하여 Polygon.__init__(self,)

좋은 선택은 내장 함수 super()를 사용하는 것입니다. 따라서, super().__init__(3)는 Polygon.__init__(self,3)이며, 최선입니다. 이에 대해 더 알아보세요파이썬에서super() 함수의자세한 정보.

두 가지 내장 함수 isinstance(), issubclass()는 상속을 확인하는 데 사용됩니다. 객체가 해당 클래스나 그에서 파생된 다른 클래스의 인스턴스라면 함수 isinstance()는 True를 반환합니다. 파이썬의 모든 클래스는 기본 클래스 object를 상속받습니다.

>>> isinstance(t, Triangle)
True
>>> isinstance(t, Polygon)
True
>>> isinstance(t, int)
False
>>> isinstance(t, object)
True

그리고, issubclass()는 클래스의 상속을 확인하는 데 사용됩니다.

>>> issubclass(Polygon, Triangle)
False
>>> issubclass(Triangle, Polygon)
True
>>> issubclass(bool, int)
True