Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解

本文详细探讨了Python的面向对象编程,包括封装、继承和多态的概念。封装强调将属性和方法放入类中,隐藏实现细节,通过对象交互。继承允许子类复用父类的属性和方法,实现代码重用。多态则表现为不同对象调用同一方法产生不同结果,增强了方法调用的灵活性。文章还涵盖了面试中可能遇到的问题,并提供了相关的习题以加深理解。
摘要由CSDN通过智能技术生成

1.面向对象的三大特征

封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限;
继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法;
多态:同一个方法不同对象调用同一个方法功能的表现形式不一样,例如:1.不同的两个对象,字符串的加法和整数的加法,同样是加法,实现的功能是不一样的;2.这两个对象之间没有任何直接继承关系,但是所有对象的最终父类都是元类;

1)封装的意义:

1.将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;
2.隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;
3.对类的属性和方法增加 访问权限控制。

2)继承

主要体现是实现代码的 重用,相同的代码不需要重复的编写;
子类可以在父类功能上进行重写,扩展类的功能。

在面向对象编程中,当我们已经创建了一个类,而又想再创建一个与之相似的类,比如添加几个方法,或者修改原来的方法,这时我们不必从头开始,可以从原来的类派生出一个新的类, 我们把原来的类称为父类或基类,而派生出的类称为子类或派生类,子类继承了父类的所有数据和方法。

从技术上说, OOP里继承最主要的用途是实现多态。对于多态而言,重要的是接口继承性,属性和行为是否存在继承性,这是不一定的。事实上, 大量工程实践表明,重度的行为继承会导致系统过度复杂和臃肿,反而会降低灵活性。因此现在比较提倡的是基于接口的轻度继承理念。这种模型里因为父类(接口类)完全没有代码,因此根本谈不上什么代码复用。

  • 单继承
子类的定义如下:

class 子类名(父类名):

    <statement-1>

    ...

    <statement-N>

父类名 BaseClassName 对于子类来说必须是可见的。也可以继承在其他模块中定义的父类:

class 子类名(模块名.父类名):
对于子类的属性引用:首先会在当前的子类中搜索,如果没有找到,则会递归地去父类中寻找。

从C++术语上讲,Python 类中所有的方法都是 vitual 的,所以子类可以覆写(override)父类的方法。
在子类中一个覆写的方法可能需要调用父类的方法,可以通过以下方式:

父类名.方法(self, arguments)
  • 多继承
Python支持多继承,一个多继承的定义形如:

class 子类名(父类名1, 父类名2, 父类名3):
多个父类有同名属性和方法

子类的魔法属性__mro__决定了属性和方法的查找顺序。如果多个父类中有同名的 属性和方法,
则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)。
子类重写父类的属性和方法

子类和父类的方法名和属性名相同,则默认使用子类的,叫 子类重写父类的同名方法和属性。

使用重写的目的:当子类发现父类的大部分功能都能满足需求,但是有一些功能不满足,则子类可以重写父类方法。
  • 调用父类方法
重写之后,如果发现仍然需要父类方法,则可以强制调用父类方法。
方法1. 指定执行父类的方法

无论何时何地,self都表示是子类的对象。在调
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值