【python学习】面向对象编程1

编程思想

面向过程编程(思想)

流水线形式

优点:逻辑清晰

(逻辑一步一步的,是一个系统)

缺点:扩展性差

(上一个函数的输出是下一个函数的输入)

面向对象编程(思想)

对象是什么?

Python中一切皆对象

对象:就是特征和技能的结合体。

面向对象编程:定义初一个个鲜明独特的对象,然后通过对象之间的交互编程。

优点:扩展性非常强

缺点:逻辑非常复杂

类和对象

以选课系统为例

定义学生对象:

姓名:小明

学号:123456

学校:oldboy

技能:选课

姓名:小红

学号:123457

学校:oldboy

技能:选课

定义老师对象:

姓名:李老师

学校:oldboy

技能:教课

姓名:张老师

学校:oldboy

技能:教课

类:分类/类别

按照学生和老师可以划分两类,一个是学生类,一个是老师类

类的概念:一系列具有共同特征或技能的对象。

在现实世界中先有对象,再有类。

在Python中先有类,再有对象。

用Python定义一个类

定义类,会直接运行类体代码

class 类明(必须得用驼峰体):

定义一系列特征

定义一系列方法

实例化对象

对象 = 类名()

python 复制代码
# 类的定义阶段,会运行代码
class OldBoyStudent:
	school = 'oldboy'
	
	# self是对象本身
	# __开头的方法会在某种情况自动调用
	# __init__在类实例化的时候自动调用
	def  __init__(self, name, age, gender):
		self.name = name
		self.age = age
		self.gender = gender
	
	# 函数定义阶段,只检测语法,不执行代码
	def choose_cource(self):
		print('is choosing cource')

# 双下划线开头的方法会在某种情况下自动触发
print(OldBoyStudent.__dict__)

# 实例化对象
stu1 = OldBoyStudent('jack','18','male')
print(stu1.school)
print(stu1.choose_cource())
 
stu2 = OldBoyStudent()
print(stu2.school)
print(stu2.choose_cource())

对象的属性查找顺序

先从对象本身查找,然后从类中查找,类也没有则报错。

类与数据类型

所有的数据类型都是类。

对象的高度整合

对象会有一大堆属性/数据,还会有一大推方法来适应操作这些属性,然后对于不同的对象,这些属性又不同。

类的继承

继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类。

在Python当中,父类、子类(派生类),父类和子类只有在继承的时候才会产生。

python 复制代码
class Parent_Foo:
    def __init__(self, first_name, money, car, house):
        self.first_name = first_name
        self.money = money
        self.car = car
        self.house = house
        
    def fine_wife(self):
        print(f'{self.first_name}先生找到妻子了')
	
    
# pf = Parent_Foo('jack', 5, 'tesla',  '1套')    
    
class Son_Foo(Parent_Foo):
	pass

sf = Son_Foo('jack', 1000, 'tesla',  '1套')
print(sf.first_name)
print(sf.money)
print(sf.car)
print(sf.house)
sf.fine_wife()

为什么要使用继承?

减少重复,所有的父亲都可以用这个类,隔离了复杂度。
不推荐使用继承 ,当继承多个的时候,功能与功能之间会混乱,顶过继承一个。

继承后查找顺序,先自己,再类,再父类,再父类的父类·······
继承就是为了使用父类的属性。

类的派生

添加新的属性,同时还继承父类的所有东西。

方法一:直接使用

python 复制代码
类名.__init__()

方法二:使用继承的方法

python 复制代码
supper().__init__()

派生:继承父类的属性同时增加新的属性,然后使用supper().init()

类的组合

组合:组合在一起。

把对象当作变量值来用,当作形参/实参/返回值。

菱形继承问题

在python3当中会默认继承object类;在python2当中不会默认继承object类,必须得手动添加。

新式类:只要继承了object类的就是新式类,python3当中所有的类都是新式类。

经典类:没有继承object类就是经典类,只有python2当中有经典类。

当继承为菱形继承的时候,经典类和新式类搜索某一个属性的顺序会不一样。

在新式类中,当遇到菱形继承时,会以广度优先查找。

在经典类中,当遇到菱形继承时,会以深度优先查找。

多态与多态性

多态:多种状态,只要大家能继承同一种东西A,这些东西就是A 的多态。

水:液态/固态/气态
不推荐使用

相关推荐
数据智能老司机5 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机6 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i6 小时前
drf初步梳理
python·django
每日AI新事件6 小时前
python的异步函数
python
这里有鱼汤7 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook16 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室17 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三18 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试