본문 바로가기
Python Object-oriented Programming

inheritance

by 자동매매 2023. 4. 4.

출처 : https://www.pythontutorial.net/python-oop/python-inheritance/

 

An Essential Guide To Python Inheritance By Practical Examples

In this tutorial, you'll learn about Python inheritance and how to use the inheritance to reuse code from an existing class.

www.pythontutorial.net

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

 

출력에 명확하게 표시된대로 :

  • personPerson 클래스의 인스턴스입니다.
  • employeeEmployee 클래스의  인스턴스입니다. Person 클래스의 인스턴스이기도 합니다  .
  • personEmployee 클래스의 인스턴스가 아닙니다.

 

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

댓글