【Python面向对象】封装、继承、多态

【Python面向对象】封装、继承、多态,第1张

面向对象有三个基本特征,分别是封装、继承和多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用/调用!本文将利用Python语言进行简单举例,以帮助大家更好地理解这三个特征。

一、面向过程和面向对象

面向过程是分析出解决问题所需要的步骤,然后用一些函数把这些步骤一步步实现,使用的时候依次调用函数(开火→炒菜→洗碗)👇;

面向对象是把构成问题的事务分解成各个对象,建立对象来描述某个事务在解决问题的步骤中的行为(开火、炒菜、洗碗)👇,按功能将对象(万物皆可对象)进行划分,确定对象的属性和行为,之后方便调用也更为灵活。

二、封装

封装是为了提高代码的复用性和可维护性,把很多数据封装到一个对象中,把固定功能的代码封装到一个代码块。

把一台洗衣机看做洗衣机类的一个实例,洗衣机里有标准洗、速洗、精洗、桶干燥、洁桶等多种功能。 作为用户不需要知道这些功能内部的具体实现,需要某项功能只要选择对应的功能键即可。这就是洗衣 机封装了以上多种功能。

例如:完成一个登录需要三个步骤,比如我把输入用户名、输入密码、点击登录三段代码写成一 个函数,那么这个函数就是登录功能的封装。我们在下次需要用到登录的时候,不需要重复写那三段代 码,而只需要调用登录函数即可。

1.未封装的用户登录:

大家可以看到,实现两个用户的登录就需要很多代码,重复率较高,假如是三个甚至更多用户则需要海量的代码,因此需要封装 *** 作。

#通过输入输出模拟用户登录
#登录1(用户:xiaoming)
user = 'xiaoming'
psw = '123456'
print('请输入用户名:',user)
print('请输入密码:',psw )
print('点击登录按钮!')
print('登录成功!')
#登录2(用户:xiaohong)
user = 'xiaohong'
psw = '1234567'
print('请输入用户名:',user)
print('请输入密码:',psw )
print('点击登录按钮!')
print('登录成功!')

运行结果:

 2.封装后的用户登录

首先在login.文件封装一个用户登录方法,一般是定义类后再定义函数,然后就可以在该项目的其他py文件中直接调用该函数,调用时填入user和psw两参数的值即可,十分方便快捷!

#login.py文件
class Login():
#类:信息封装的基础
    def user_login(self,user,psw):
        #封装用户登录方法,方便调用
        print('请输入用户名:', user)
        print('请输入密码:', psw)
        print('点击登录按钮!')
        print('登录成功!')
#testcase.py文件,调用login.py文件的Login类
from login import Login

lg = Login() #实例化,必要的 *** 作
lg.user_login('xiaoming','123456')#调用类中的函数并使用
lg.user_login('xiaohong','1234567')

运行结果:

三、继承

简单来说继承是类与类的一种关系,子类与父类的关系,子类继承父类的属性与方法(类就是继承中的class)。

例如:猫属于动物,猫类继承于动物类,猫类就是子类,动物类是父类

动物类具备吃的方法,那么猫类能够继承动物类的吃方法,能够在猫类中调用吃方法。

class Animal():#定义动物类,动物都会吃
    def eat(self):
        print('会吃')
class Cat(Animal):#定义猫类,同时继承动物类,猫会喵喵
    def miao(self):
        print('会喵喵')
c = Cat()#实例化
c.miao()
c.eat()#继承Animal父类的eat方法

运行结果:

四、多态

不同的子类调用相同的方法,产生不同的结果,前提是继承,多态的关注在于对象的行为和属性而非类型。

例如:猫和狗都属于动物,都具有叫声这个方法,但是猫和狗的叫声实际上是不一样的,这时我们往往是定义成一样名称的功能但是功能的类型不一样

查看运行结果可知,虽然都调用了talk方法,但是输出结果是不一样的,可知会调用自家的方法(虽然都是talk方法)并出产生不同的结果;同时需要注意一个点,假如父类(Animal)和子类(Cat、Dog)同时存在talk方法,那么调用时也只以子类中的方法为准(方法名称相同时)。

class Animal: #定义动物类,动物都会发声
    def talk(self):
        print('呜呜')
class Cat(Animal):#定义猫类,同时继承动物类,猫会喵喵
    def talk(self):
        print('会喵喵')
class Dog(Animal):#定义狗类,同时继承动物类,猫会汪汪
    def talk(self):
        print('会汪汪')
        
c = Cat()#实例化猫类
c.talk()#调用猫类的talk方法
d = Dog()#实例化狗类
d.talk()#调用狗类的talk方法

运行结果:


总结

大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/798411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存