Python小白学习笔记六 (面向对象 2 )

三大特征(封装,继承,多态)

封装

数据角度讲

1.定义:
将一些基本数据类型复合成一个自定义类型。

2.优势:
将数据与对数据的操作相关联。

 代码可读性更高(类是对象的模板)。

行为角度讲

1.定义:
向类外提供必要的功能,隐藏实现的细节。

2.优势:
简化编程,使用者不必了解具体的实现细节,只需要调用对外提供的功能。

3.私有成员:

	(1)作用:无需向类外提供的成员,可以通过私有化进行屏蔽。
	(2)做法:命名使用双下划线开头。
	(3)本质:障眼法,实际也可以访问。

私有成员的名称被修改为:_类名__成员名,可以通过_dict_属性或dir函数查看。

4.属性@property:
将方法的使用方式像操作变量一样方便,从而保护实例变量。

(1)定义:
@property
def 属性名(self):
	return self.__属性名
@属性名.setter
def 属性名(self, value):
	self.__属性名= value
(2)调用:
对象.属性名 = 数据
变量 = 对象.属性名
(3)说明:
通常两个公开的属性,保护一个私有的变量。
 @property 负责读取,@属性名.setter 负责写入
 只写:属性名= property(None, 写入方法名)

设计角度讲

1.定义:
(1) 分而治之

将一个大的需求分解为许多类,每个类处理一个独立的功能。

(2) 变则疏之

变化的地方独立封装,避免影响其他类。

(3) 高 内 聚

类中各个方法都在完成一项任务(单一职责的类)。

(4) 低 耦 合

类与类的关联性与依赖度要低(每个类独立),让一个类的改变,尽少影响其他类。

2.优势:
便于分工,便于复用,可扩展性强。

继承

语法角度讲

继承方法

1.代码:
class 父类:
		def 父类方法(self):
		    方法体
class 子类(父类)def 子类方法(self):
			方法体
儿子 = 子类()
儿子.子类方法()
儿子.父类方法()

2.说明:
子类直接拥有父类的方法

内置函数

			isinstance(对象, 类型) 
			返回指定对象是否是某个类的对象。
			
			issubclass(类型,类型)
			返回指定类型是否属于某个类型。

继承数据

1.代码
class 子类(父类):
 	def __init__(self,参数列表):
		super().__init__(参数列表)
		self.自身实例变量 = 参数

2.说明
子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数,以确保父类实例变量被正常创建。

定义

重用现有类的功能,并在此基础上进行扩展。

说明:子类直接具有父类的成员(共性),还可以扩展新功能。

优点:一种代码复用的方式。
缺点:耦合度高:父类的变化,直接影响子类。

设计角度讲

定义:将相关类的共性进行抽象,统一概念,隔离变化。

适用性:多个类在概念上是一致的,且需要进行统一的处理。

相关概念

父类(基类、超类)、子类(派生类)。

父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。
单继承:父类只有一个(例如 Java,C#)。
多继承:父类有多个(例如C++,Python)。
Object类:任何类都直接或间接继承自 object 类。

多态

设计角度讲

定义

父类的同一种动作或者行为,在不同的子类上有不同的实现。

作用

1.在继承的基础上,体现类型的个性化(一个行为有不同的实现)。
2.增强程序扩展性,体现开闭原则。

语法角度讲

重写

		子类实现了父类中相同的方法(方法名、参数)。
		在调用该方法时,实际执行的是子类的方法。

快捷键

		Ctrl + O

内置可重写函数

	Python中,以双下划线开头、双下划线结尾的是系统定义的成员。我们可以在自定义类中进行重写,从而改变其行为。

转换字符串

	__str__函数:将对象转换为字符串(对人友好的)
	__repr__函数:将对象转换为字符串(解释器可识别的)

运算符重载

定义:让自定义的类生成的对象(实例)能够使用运算符进行操作。

算数运算符
在这里插入图片描述

复合运算符重载
在这里插入图片描述

比较运算重载

在这里插入图片描述

设计原则

开-闭原则(目标、总的指导思想)

Open Closed Principle

对扩展开放,对修改关闭。

增加新功能,不改变原有代码。

类的单一职责(一个类的定义)

Single Responsibility Principle

一个类有且只有一个改变它的原因。

依赖倒置(依赖抽象)

Dependency Inversion Principle

客户端代码(调用的类)尽量依赖(使用)抽象。

抽象不应该依赖细节,细节应该依赖抽象。

组合复用原则(复用的最佳实践)

Composite Reuse Principle

如果仅仅为了代码复用优先选择组合复用,而非继承复用。

组合的耦合性相对继承低。

里氏替换(继承后的重写,指导继承的设计)

Liskov Substitution Principle

父类出现的地方可以被子类替换,在替换后依然保持原功能。

子类要拥有父类的所有功能。

子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。

迪米特法则(类与类交互的原则)

Law of Demeter

不要和陌生人说话。

类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。

相关练习及总结见下篇学习笔记,明日更。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值