Python基础_Day12

面向对象的语言的特征

封装 继承 多态[Python本身就是多态的]

多态: 事物的多种形态 Python本身是动态语言

a = 10

a = "hello"

java: 静态语言

声明变量的时候 必须指明变量的类型 必须赋予该类型的数据

int	a = "100"

1.封装

在程序中的体现:

广义的封装

	功能的封装

狭义的封装

	将无需对外暴露的内容隐藏起来 然后提供设置和获取内容的方式(方法函数)

案例:

人类:
	姓名 年龄 性别

在程序中体现的封装:
	将属性给私有化[隐藏起来] 对外提供设置(set)和获取(get)的方式
好处:
	可以在程序中添加根据生活需求产生的逻辑判断
	隔离复杂度  
	保护隐私 不让外界随意修改

练习:

动物:
	属性: 种类 性别 年龄

2.对象的属性是可以动态添加的

Python中没有真正的私有化 [掩耳盗铃]

在类中声明对象的属性的时候
	只要执行了self.属性名 ---> 这个对象就具有这个属性了
	使用self来进行添加的属性是属于该类所有对象的
在类的外面通过引用变量来添加属性
	这种添加方式只有当前对象具有该属性 其他该类对象没有该属性

3.继承

程序中的继承:
	有两个或者两个以上的相关普通类中 提取出相同的特性 将这些提到一个共通类中 以指定的方式将普通类与共通类关联起来 形成继承体系
	共通类: 称之为 父类 超类 基类
	普通类: 称之为 子类

案例:

学生类:
	属性:
		姓名
		性别
		年龄
		学号
	行为:
		吃饭
		学习
工人类:
	属性:
		姓名
		性别
		年龄
		工号
	行为:
		吃饭
		工作

学生是人 工人是人 通过人类来进行关联
人类:
	属性:
		姓名
		年龄
		性别
	行为:
		吃饭

在继承体系中 子类获取父类中的可见属性或者调用父类中的方法 直接调用 就像调用自己的一样

如果私有化封装的内容 还是需要父类提供获取和设置的方式 子类才可以获取

4.继承关系

继承分为单继承和多继承 Python支持的是多继承

多层继承: 间接继承关系

单继承是代表 某个普通类有且仅有一个直接父类 但是可以有多个间接父类

class A:
	pass
class B(A):
	pass
class C(B):
	pass

多继承 : 某个普通类有且仅有多个直接父类 但是可以有多个间接父类

class A:
	pass
class B(A):
	pass
class C(A):
	pass
class D(B, C):
	pass

案例:

动物体系:
	狗类dog
	蝙蝠类bat
	鸵鸟类ostrich
	鹦鹉类parrot
			   动物类
能走的		哺乳类		鸟类		能飞的
dog		    dog		ostrich      bat
ostrich		bat		 parrot     parrot

5.继承体系中方法的重写

特殊的类: object —> 是所有类的根类 相当于族谱中的祖宗的位置

当一个类没有体现继承关系的 默认就是继承自object

类名.bases 可以体现出该类继承的父类

类名.mro() 体现的是该类的继承体系

自定义方法的重写

父类提取的是子类共通的特性 包含共通的行为
如果子类中功能的实现内容与父类中功能的实现内容不一致 子类可以对该方法进行重写
重写的时候注意:
	子类中该方法的签名与父类中的方法签名一致
方法签名:
	def 函数名(形参列表):
		函数体
def 函数名(形参列表) ---> 被称之为方法签名
当子类重写了父类方法 子类再来调用该方法 调用时其本身重写之后的方法
有一种需求:
	子类重写方法之后 调用该功能时 还想实现父类的 也想实现自己的
	可以在子类重写的方法中 通过super().父类中的方法 将父类中的方法进行执行

案例:

愤怒的小鸟:
	小红鸟
		颜色
		攻击
	小黑鸟
		颜色
		攻击
	小黄鸟
		颜色
		攻击

系统方法的重写

__str__()
	对于程序外部而言的 
	例如想在控制台上查看对象的信息 会调用该对象的__str__方法
__repr__()
	针对于程序中其他数据而言的
	比如将对象添加到列表中 想通过列表查看对象的信息 调用的就是该对象的__repr__方法

猜你喜欢

转载自blog.csdn.net/weixin_42076261/article/details/88421445