> 백엔드 개발 > 파이썬 튜토리얼 > Python의 상속과 다형성 살펴보기

Python의 상속과 다형성 살펴보기

풀어 주다: 2023-07-25 15:14:56
앞으로
1025명이 탐색했습니다.

1. 상속 소개

상속은 새로 생성된 클래스를 하위 클래스라고 하며, 상속된 클래스를 상위 클래스, 기본 클래스라고 합니다. 상속의 특징은 하위 클래스가 상위 클래스의 속성(기능, 기술)을 사용할 수 있다는 것입니다. 상속은 클래스 간의 관계입니다.

상속은 코드 중복을 줄이고 재사용성을 향상시킬 수 있습니다.

실생활에서 상속이란 일반적으로 아래와 같이 자녀가 부모의 재산을 물려받는 것을 말합니다.

Python의 상속과 다형성 살펴보기

2. 상속은 어떻게 사용하나요?

1. 상속 구문

Class 파생 클래스 이름(기본 클래스 이름): #기본 클래스 이름은 괄호 안에 표시됩니다.

상속 관계에서 기존 클래스와 설계된 클래스를 상위 클래스 또는 기본 클래스라고 하며, 새로 설계된 클래스를 하위 클래스 또는 파생 클래스라고 합니다. 파생 클래스는 상위 클래스의 공개 멤버를 상속할 수 있지만 전용 멤버는 상속할 수 없습니다.

2. 상속의 특징

  1. 상속에서는 기본 클래스의 생성자(init() 메서드)가 자동으로 호출되지 않으며 생성 중에 있어야 합니다. 파생 클래스는 구체적으로 직접 호출됩니다.

  2. 파생 클래스에서 기본 클래스 메서드를 호출해야 하는 경우 "기본 클래스 이름. 메서드 이름()" 메서드를 사용하여 기본 클래스 클래스 이름 접두사를 추가해야 합니다. 자체 매개변수 변수를 가져옵니다. 클래스에서 일반 함수를 호출하는 것과는 달리 self 매개변수를 가져올 필요가 없습니다. 이 목적으로 내장 함수 super()를 사용할 수도 있습니다.

  3. Python은 항상 해당 유형의 메서드를 먼저 검색합니다. 파생 클래스에서 해당 메서드를 찾을 수 없으면 기본 클래스에서 하나씩 검색을 시작합니다(먼저 이 클래스에서 호출된 메서드를 검색합니다. 클래스를 찾을 수 없는 경우 기본 클래스로 이동하여 찾습니다.

3. 단일 상속

3.1 단일 상속

예:

class Animal: #父类
    def eat(self): 
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")




class Dog(Animal): #子类继承父类
    """
    def eat(self):
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")
    """
    pass




class Cat:
    pass




wang_cai = Dog()
wang_cai.eat()
wang_cai.drink()
로그인 후 복사

실행 결과:

Python의 상속과 다형성 살펴보기


3.2 다단계 상속

예:

class Animal:
    def eat(self):
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")




class Dog(Animal):
    def bark(self):
        print("-----汪汪叫------")




class XTQ(Dog):
    """定义了一个哮天犬 类"""
    pass




class Cat(Animal):
    def catch(self):
        print("----捉老鼠----")




xtq = XTQ()
xtq.eat()
xtq.bark()
로그인 후 복사

실행 결과:

Python의 상속과 다형성 살펴보기


3.3 重写父类方法

例:

class Animal: #父类
    def eat(self):
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")


 
class Dog(Animal): 
    def bark(self):
        print("-----汪汪叫------")




class XTQ(Dog): #重写Dog方法
    """定义了一个哮天犬 类"""
    def bark(self):
        print("----嗷嗷叫-----")




class Cat(Animal):
    def catch(self):
        print("----捉老鼠----")




xtq = XTQ()
xtq.eat()
xtq.bark()
로그인 후 복사

运行结果:

Python의 상속과 다형성 살펴보기


4. 多继承

4.1 多继承

Python의 상속과 다형성 살펴보기

从图中能够看出,所谓多继承,即子类有多个父类,并且具有它们的特征。

Python中多继承的格式如下:

# 定义一个父类
class A:
    def printA(self):
        print('----A----')


# 定义一个父类
class B:
    def printB(self):
        print('----B----')


# 定义一个子类,继承自A、B
class C(A,B):
    def printC(self):
        print('----C----')


obj_C = C()
obj_C.printA()
obj_C.printB()
로그인 후 복사

运行结果:

----A----
----B----
로그인 후 복사

Python中是可以多继承的,父类中的方法、属性,子类会继承。


想一想:

如果在上面的多继承例子中,如果父类A和父类B中,有一个同名的方法,那么通过子类去调用的时候,调用哪个?

#coding=utf-8
class base(object):
    def test(self):
        print('----base test----')
class A(base):
    def test(self):
        print('----A test----')


# 定义一个父类
class B(base):
    def test(self):
        print('----B test----')


# 定义一个子类,继承自A、B
class C(A,B):
    pass


obj_C = C()
obj_C.test()


print(C.__mro__) #可以查看C类的对象搜索方法时的先后顺序
로그인 후 복사

运行结果:

Python의 상속과 다형성 살펴보기


5. 多态

5.1 什么是多态?

多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

  • Python伪代码实现Java或C#的多态。

5.2 案例

Python “鸭子类型”

class Duck:
    def quack(self):
        print("Quaaaaaack!")




class Bird:
    def quack(self):
        print("bird imitate duck.")




class Doge:
    def quack(self):
        print("doge imitate duck.")




def in_the_forest(duck):
    duck.quack()




duck = Duck()
bird = Bird()
doge = Doge()
for x in [duck, bird, doge]:
    in_the_forest(x)
로그인 후 복사

运行结果:

Python의 상속과 다형성 살펴보기


三、总结

本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承、多继承的语法、多态常见的 “鸭子类型”、 以及如何重写父类的方法都做了详细的讲解。

위 내용은 Python의 상속과 다형성 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:Go语言进阶学习
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿