python
상속을 통해 부모 클래스에서 모든 기능을 가져오고 더 추가할 수 있는 클래스를 정의할 수 있습니다. 이 자습서에서는 Python에서 상속을 사용하는 방법을 배웁니다.
상속은 객체 지향 프로그래밍의 강력한 기능입니다.
기존 클래스를 거의 또는 전혀 수정하지 않고 새 클래스를 정의하는 것을 말합니다. 새 클래스를 파생(또는 자식) 클래스라고 합니다. 상속되는 클래스를 기본(또는 상위) 클래스라고 합니다. .
<시간>class BaseClass: Body of base class class DerivedClass(BaseClass): Body of derived class
파생 클래스는 새 기능을 추가할 수 있는 기본 클래스의 기능을 상속합니다. 그 결과 코드를 재사용할 수 있습니다.
<시간>상속 사용을 설명하기 위해 예를 들어보겠습니다.
다각형은 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("Enter side "+str(i+1)+" : ")) for i in range(self.n)]
def dispSides(self):
for i in range(self.n):
print("Side",i+1,"is",self.sides[i])
이 클래스에는 n의 면 수를 저장하는 데이터 속성이 있습니다. sides라는 목록으로 각 측면의 크기 .
inputSides()
메서드는 각 측면의 크기와 dispSides()
를 취합니다. 이 측면 길이를 표시합니다.
삼각형은 변이 3개인 다각형입니다. 따라서 Triangle이라는 클래스를 만들 수 있습니다. Polygon에서 상속 . 이렇게 하면 Polygon의 모든 속성이 Triangle에 사용할 수 있는 클래스 수업.
다시 정의할 필요가 없습니다(코드 재사용성). 삼각형 다음과 같이 정의할 수 있습니다.
class Triangle(Polygon):
def __init__(self):
Polygon.__init__(self,3)
def findArea(self):
a, b, c = self.sides
# calculate the semi-perimeter
s = (a + b + c) / 2
area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
print('The area of the triangle is %0.2f' %area)
그러나 클래스 Triangle
새로운 메소드 findArea()
가 있습니다. 삼각형의 면적을 찾아 인쇄합니다. 다음은 샘플 실행입니다.
>>> t = Triangle()
>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.findArea()
The area of the triangle is 6.00
inputSides()
와 같은 메소드를 정의하지 않았음에도 불구하고 볼 수 있습니다. 또는 dispSides()
Triangle
클래스용 별도로 사용할 수 있었습니다.
속성이 클래스 자체에서 발견되지 않으면 검색은 기본 클래스로 계속됩니다. 이는 기본 클래스가 다른 클래스에서 파생된 경우 재귀적으로 반복됩니다.
<시간>
위의 예에서 __init__()
메소드가 두 클래스 모두에서 정의되었습니다. Triangle 다각형 . 이 경우 파생 클래스의 메서드가 기본 클래스의 메서드를 재정의합니다. 즉, __init__()
삼각형 __init__
보다 우선 적용됩니다. 다각형 .
일반적으로 기본 메서드를 재정의할 때 단순히 정의를 대체하기보다 확장하는 경향이 있습니다. 파생 클래스의 메서드에서 기본 클래스의 메서드를 호출하여 동일한 작업이 수행됩니다(Polygon.__init__()
호출). __init__()
에서 Triangle
에서 ).
더 나은 옵션은 내장 함수 super()
를 사용하는 것입니다. . 따라서 super().__init__(3)
Polygon.__init__(self,3)
과 동일합니다. 및 선호됩니다. super()
에 대해 자세히 알아보려면 Python에서 함수를 보려면 Python super() 함수를 방문하십시오.
두 개의 내장 함수 isinstance()
및 issubclass()
상속을 확인하는 데 사용됩니다.
함수 isinstance()
True
반환 객체가 클래스의 인스턴스이거나 그로부터 파생된 다른 클래스인 경우. Python의 모든 클래스는 기본 클래스 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
python
Python 데이터 클래스는 @dataclass이 있는 일반 Python 클래스입니다. 장식가. 데이터를 보관하기 위해 특별히 만들어졌습니다. Python 버전 3.7부터 Python은 dataclass이라는 내장 모듈을 통해 데이터 클래스를 제공합니다. . 이 기사에서 살펴볼 일반 Python 클래스에 비해 몇 가지 장점이 있습니다. 또한 예제 코드와 데이터 클래스로 수행할 수 있는 몇 가지 일반적인 작업을 살펴보겠습니다. 목차 데이터 클래스 사용의 이점 Python 데이터 클래스 예시 기본값 데이터 클래스를 JSON으로 변환
상속은 한 클래스가 다른 클래스의 속성(메서드 및 필드)을 획득하는 프로세스로 정의할 수 있습니다. 상속을 사용하면 정보를 계층적 순서로 관리할 수 있습니다. 다른 사람의 속성을 상속하는 클래스를 하위 클래스(파생 클래스, 자식 클래스)라고 하고 속성을 상속받는 클래스를 슈퍼 클래스(기본 클래스, 부모 클래스)라고 합니다. 확장 키워드 확장 클래스의 속성을 상속하는 데 사용되는 키워드입니다. 다음은 extends 키워드의 구문입니다. 구문 class Super { ..... ..... } class Sub ext