파이썬에서 클래스 상속은 한 클래스가 다른 클래스의 특성과 동작을 상속받아 사용하는 개념입니다. 상속을 통해 코드 재사용성을 높일 수 있고, 새로운 클래스를 정의할 때 기존 클래스의 기능을 확장하거나 수정할 수 있습니다. 여기에서는 파이썬에서의 클래스 상속에 대한 주요 개념을 살펴보겠습니다.
기본적인 상속
클래스 상속은 새로운 클래스를 정의할 때 괄호 안에 기존 클래스의 이름을 넣어서 표현합니다. 새로운 클래스는 기존 클래스의 특성과 동작을 상속받습니다.
class ParentClass:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Hello, {self.name}!")
# ParentClass를 상속받은 ChildClass 정의
class ChildClass(ParentClass):
def __init__(self, name, age):
# 부모 클래스의 생성자 호출
super().__init__(name)
self.age = age
def show_info(self):
print(f"{self.name} is {self.age} years old.")
# ChildClass의 객체 생성
child = ChildClass("Alice", 25)
# 부모 클래스의 메서드 호출
child.greet() # 출력: Hello, Alice!
# 자식 클래스의 메서드 호출
child.show_info() # 출력: Alice is 25 years old.
super() 함수
super() 함수를 사용하여 부모 클래스의 메서드나 속성에 접근할 수 있습니다. 부모 클래스의 생성자를 호출하는 데 주로 사용됩니다.
메서드 오버라이딩
자식 클래스에서 부모 클래스와 동일한 이름을 가진 메서드를 정의하면, 자식 클래스의 메서드가 부모 클래스의 메서드를 덮어쓰게 됩니다. 이를 메서드 오버라이딩이라고 합니다.
class Animal:
def make_sound(self):
print("Some generic sound")
class Dog(Animal):
def make_sound(self):
print("Bark! Bark!")
# Dog 클래스의 객체 생성
dog = Dog()
# 자식 클래스의 메서드 호출
dog.make_sound() # 출력: Bark! Bark!
다중 상속
파이썬은 다중 상속을 지원합니다. 다중 상속은 여러 부모 클래스로부터 상속을 받는 것을 의미합니다.
class A:
def show(self):
print("Class A")
class B:
def show(self):
print("Class B")
class C(A, B):
pass
# C 클래스의 객체 생성
c = C()
# 다중 상속 시 우선순위는 클래스 정의 순서에 따름
c.show() # 출력: Class A
추상 클래스와 추상 메서드
추상 클래스는 추상 메서드를 포함하고 있으며, 추상 메서드는 하위 클래스에서 반드시 구현되어야 하는 메서드입니다.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
# Circle 클래스의 객체 생성
circle = Circle(5)
# 추상 메서드 구현
print(circle.area()) # 출력: 78.5
상속은 객체 지향 프로그래밍에서 코드를 구조화하고 재사용성을 높이는 중요한 메커니즘 중 하나입니다. 클래스 상속을 통해 기존 클래스의 특성을 확장하거나 수정함으로써 코드를 보다 유연하게 관리할 수 있습니다.
With ChatGPT
'Python > 포스팅' 카테고리의 다른 글
파이썬 클래스 변수 (0) | 2023.12.03 |
---|---|
파이썬 메서드 오버라이딩 (0) | 2023.12.03 |
파이썬 생성자 (0) | 2023.12.03 |
파이썬 객체 (0) | 2023.12.03 |
파이썬 클래스 (0) | 2023.12.03 |