【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 的多态。

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

相关推荐
测试19984 分钟前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
love_and_hope4 分钟前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen7 分钟前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)17 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠26 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_28 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_201333 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑40 分钟前
php 使用qrcode制作二维码图片
开发语言·php
零意@41 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
夜雨翦春韭44 分钟前
Java中的动态代理
java·开发语言·aop·动态代理