출처 : https://www.pythontutorial.net/python-oop/python-inheritance/
Introduction to the Python inheritance
상속을 사용하면 클래스가 기존 클래스의 논리를 다시 사용할 수 있습니다. 다음과 같은 Person 클래스가 있다고 가정합니다
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hi, it's {self.name}"
Person 클래스에는 이름 특성과 greet() 메서드가 있습니다.
이제 Person 클래스와 유사한 Employee을 정의하려고 합니다.
class Employee:
def __init__(self, name, job_title):
self.name = name
self.job_title = job_title
def greet(self):
return f"Hi, it's {self.name}"
Employee 클래스에는 이름과 job_title이라는 두 가지 특성이 있습니다 . 또한 Person 클래스의 greet() 메서드와 정확히 동일한 greet() 메서드도 있습니다.
Employee 클래스의 Person 클래스에서 greet() 메서드를 다시 사용하려면 Person 클래스와 Employee 클래스 간에 관계를 만들 수 있습니다 . 이렇게 하려면 상속을 사용하여 Employee 클래스가 Person 클래스에서 상속되도록 합니다 .
다음은 Person 클래스에서 상속되는 Employee 클래스를 다시 정의합니다.
class Employee(Person):
def __init__(self, name, job_title):
self.name = name
self.job_title = job_title
이렇게 하면 Employee 클래스는 greet() 메서드를 다시 정의하지 않고 Person 클래스 와 동일하게 동작 합니다.
이는 Employee이 단일 클래스(Person)에서 상속하기 때문에 단일 상속입니다. Python은 클래스가 여러 클래스에서 상속되는 다중 상속도 지원합니다.
Employee은 Person 클래스의 특성과 메서드를 상속하므로 Employee 클래스의 인스턴스를 Person 클래스의 인스턴스인 것처럼 사용할 수 있습니다.
예를 들어, 다음은 Employee 클래스의 새 인스턴스를 만들고 greet() 메서드를 호출합니다.
employee = Employee('John', 'Python Developer')
print(employee.greet())
Output:
Hi, it's John
Inheritance terminology(용어)
Person 클래스는 parent class, base class 또는 Employee 클래스의 super class입니다 . 그리고 Employee 클래스는 Person 클래스의 child class, derived class, or sub class 입니다.
Employee 클래스는 Person 클래스에서 파생, 확장 또는 서브클래싱됩니다.
Employee 클래스와 Person 클래스 간의 관계는 IS-A 관계입니다. 즉, Employee은 Person입니다.
type vs. isinstance
다음은 Person 및 Employee 클래스의 인스턴스 type을 보여줍니다.
person = Person('Jane')
print(type(person))
employee = Employee('John', 'Python Developer')
print(type(employee))
Output:
<class '__main__.Person'>
<class '__main__.Employee'>
객체가 클래스의 인스턴스인지 확인하려면 isinstance() 메서드를 사용합니다. 예를 들어:
person = Person('Jane')
print(isinstance(person, Person)) # True
employee = Employee('John', 'Python Developer')
print(isinstance(employee, Person)) # True
print(isinstance(employee, Employee)) # True
print(isinstance(person, Employee)) # False
Output:
True
True
True
False
출력에 명확하게 표시된대로 :
- person은 Person 클래스의 인스턴스입니다.
- employee은 Employee 클래스의 인스턴스입니다. Person 클래스의 인스턴스이기도 합니다 .
- person은 Employee 클래스의 인스턴스가 아닙니다.
issubclass
클래스가 다른 클래스의 서브클래스인지 확인하려면 issubclass() 함수를 사용합니다.
print(issubclass(Employee, Person)) # True
다음은 Employee 클래스에서 상속되는 SalesEmployee 클래스를 정의합니다.
class SalesEmployee(Employee):
pass
SalesEmployee는 Employee 클래스의 sub 클래스입니다 . 또한 다음과 같이 Person 클래스의 sub 클래스입니다.
print(issubclass(SalesEmployee, Employee)) # True
print(issubclass(SalesEmployee, Person)) # True
어떤 클래스에서도 상속되지 않는 클래스를 정의하면 built-in object클래스에서 암시적으로 상속됩니다.
예를 들어, Person 클래스는 object 클래스에서 암시적으로 상속됩니다 . 따라서 object 클래스의 하위 클래스입니다.
print(issubclass(Person, object)) # True
즉, 모든 클래스는 object 클래스의 sub 클래스입니다.
Summary
- 상속을 사용하면 클래스가 다른 클래스의 기존 속성과 메서드를 다시 사용할 수 있습니다.
- 다른 클래스에서 상속되는 클래스를 child class(자식 클래스), subclass(하위 클래스) 또는 drived class(파생 클래스)라고 합니다.
- 다른 클래스가 상속하는 클래스를 parent class(부모 클래스), super class(상위 클래스) 또는 base class(기본 클래스)라고합니다.
- isinstance()를 사용하여 객체가 클래스의 인스턴스인지 확인하십시오.
- issubclass()를 사용하여 클래스가 다른 클래스의 sub class인지 확인합니다.
'Python Object-oriented Programming' 카테고리의 다른 글
__slots__ Method (0) | 2023.04.04 |
---|---|
overriding-method (0) | 2023.04.04 |
delete-property (0) | 2023.04.04 |
readonly-property (0) | 2023.04.04 |
properties (0) | 2023.04.04 |
댓글