English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
상속은 부모 클래스의 모든 기능을 继承할 수 있는 클래스를 정의하고 더 많은 기능을 추가할 수 있게 합니다. 이 문서에서는 Python에서 상속을 사용하는 방법을 배울 것입니다.
상속은面向对象编程의 강력한 기능 중 하나입니다.
그것은 새로운클래스며, 기존 클래스에 대해 거의 수정이나 수정이 없습니다. 새 클래스는파생(자) 클래스而从 그것을 继承한 새 클래스는기본(부) 클래스.
class BaseClass: # 기본 클래스의 주체 class DerivedClass(BaseClass): # 파생 클래스의 주체
파생 클래스는 기본 클래스에서 요소를 继承하고 새 요소를 추가합니다. 이는 코드의 재사용성을 높입니다.
상속의 사용을 보여주기 위해 예제를举겠습니다.
다边形은 다음과 같습니다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