Python的封装继承多态和多重继承 | Python 主题月

简介: Python的封装继承多态和多重继承 | Python 主题月

网络异常,图片无法展示
|



相信你一定知道继承,多态和封装。封装通常是为了提供统一接口而将具体实现过程或者属性以方法或者类的方式对外呈现;继承就是子类继承父类从而拥有父类的方法和属性;多态是继承了同一个父类的不同子类分别重写了父类的某个方法而使得这个方法在不同的子类中有不同的实现。


多重继承即子类继承多个父类,拥有多个父类的方法和属性。


1、封装


比如我们想实现输入两个数字就可以计算其乘积。


第一种方式:


def ret2x(x,y):
    sum=0
    while x>0:
        sum+=y
        x-=1 
    return sum
>>> ret2x(2,8) 
16
>>> ret2x(90,8) 
720
>>>
复制代码


第二种方式:


def ret2x(x,y):
    return x*y
>>> ret2x(2,8) 
16
>>> ret2x(90,8) 
720
>>>
复制代码


可以看到执行结果一毛一样,对于使用者来说,不关注也看不到ret2x的具体实现,只需要调用拿到结果即可。


2、继承


定义Chinese类继承Human类:


class Human(object):
    hum = '人类'
    def kind(self):
        print("人类...")
class Chinese(Human):
    chin = '中国人'
复制代码


执行:


>>> from payhlib import Chinese
>>> c = Chinese()
>>> c.hum
'人类'
>>> c.chin
'中国人'
>>> c.kind()
人类...
>>>
复制代码


Chinese类继承了Human类,所以Chinese的对象拥有了Human父类的hum属性和kind方法。


3、多态


继续在继承的基础上进行演示:


class Human(object):
    hum = '人类'
    def kind(self):
        print("人类...")
    def country(self):
        pass
class Chinese(Human):
    chin = '中国人'
    def country(self):
        print('北京')
class Japanese(Human):
    jap = '日本人'
    def country(self):
        print('东京')
Chinese类和Japanese类分别实现了父类Human的country方法。
复制代码


执行:


>>> from payhlib import *
>>> a = Chinese()
>>> b = Japanese()
>>> a.country()
北京
>>> b.country()
东京
>>> a.kind()
人类...
>>> b.kind()
人类...
>>>
复制代码


中国人和日本人都是人类,但是中国的首都是北京,日本的首都是东京。


4、多重继承


讲了这么多,现在进入正题,我们都知道世界上人类按照性别可以分为男和女。如果我们于上面的Chinese类和Japanese增加性别相关属性和方法,就可以通过多重继承实现。


class Human(object):
    hum = '人类'
    def kind(self):
        print("人类...")
    def country(self):
        pass
class Sex(object):
    summary = '性别类'
    def male(self):
        print('男人')
    def female(self):
        print('女人')
class Chinese(Human,Sex):
    chin = '中国人'
    def country(self):
        print('北京')
class Japanses(Human,Sex):
    jap = '日本人'
    def country(self):
        print('东京')
复制代码


执行:


>>> from payhlib import *
>>> a = Chinese()
>>> b = Japanses()
>>> a.kind()
人类...
>>> b.kind()
人类...
>>> a.male()
男人
>>> b.female()
女人
>>> a.hum
'人类'
>>> a.summary
'性别类'
>>>
复制代码


Chinese类即拥有Human类的方法属性,也拥有Sex类的方法和属性。


多重继承+多态的效果:


class Human(object):
    hum = '人类'
    def kind(self):
        print("人类...")
    def country(self):
        pass
class Sex(object):
    summary = '性别类'
    def male(self):
        print('男人')
    def female(self):
        print('女人')
class Chinese(Human,Sex):
    chin = '中国人'
    def country(self):
        print('北京')
    def male(self):
        print('中国男人')
    def female(self):
        print('中国女人')
class Japanses(Human,Sex):
    jap = '日本人'
    def country(self):
        print('东京')
    def male(self):
        print('日本男人')
    def female(self):
        print('日本女人')
复制代码


执行:


>>> from payhlib import *
>>> a = Chinese()  
>>> b = Japanses()
>>> a.kind()
人类...
>>> b.kind()   
人类...
>>> a.country()
北京
>>> b.country() 
东京
>>> a.male()
中国男人
>>> b.male() 
日本男人
>>> a.female() 
中国女人
>>> b.female() 
日本女人
>>> a.summary  
'性别类'
>>> b.summary 
'性别类'
>>>
复制代码


Chinese类和Japanese类同时继承了Human类和Sex类,所有Chinese的对象和Japanese的对象就拥有了Human和Sex的属性和方法,但是他们又分别重写了父类的country和male即female方法。这种多重继承的方式也称MixIn(混入)。

相关文章
|
2天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
10天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
52 0
|
24天前
|
Python
python使用tkinter库,封装操作excel为GUI程序
python使用tkinter库,封装操作excel为GUI程序
|
1月前
|
Python
Python继承:深入探索与实际应用
Python中的继承是OOP三大特性之一,允许子类继承父类的属性和方法,实现代码重用和扩展。子类通过`class`关键字和父类名定义,支持单继承和多继承。子类可覆盖父类方法,使用`super()`调用父类同名方法。继承在实际应用中如游戏开发,可创建类体系,提高代码复用性,实现模块化和层次化。掌握继承对于构建高效软件系统至关重要。
|
1月前
|
安全 Python
Python封装:深入解析与应用
封装是Python面向对象编程的关键,通过隐藏对象属性和实现细节,提供公共访问方式,确保代码安全和可维护。实现封装主要通过类和对象,使用私有属性(__前缀)及访问器/修改器方法。封装能隐藏内部状态、统一接口、复用代码和增强扩展性。示例展示了如何用私有属性和访问器方法控制属性访问。掌握封装有助于编写高效、灵活的代码。
|
JavaScript 前端开发 网络架构
python中封装与解构
python中封装与解构
114 0
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
15天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python:探索编程之美
Python:探索编程之美
9 0