01. 类与对象、初始化、属性操作

一、如何基于面向对象的思想写程序?

1、面向过程编程:

核心是过程二字,过程是解决问题的步骤,即先做什么后做什么
基于该思想编程就是在设计一条条的流水线

优点:可将复杂的问题流程化,进而简单化
缺点:可拓展性差

2、面向对象编程

核心是对象二字,对象是一个用来盛放功能和数据的容器
基于该思想编程就是在整合程序

优点:可拓展性强
缺点:编程的复杂度高

比如写一个选课系统的程序
没接触过类的使用的话,写程序会比较流程化,将所有数据和功能杂乱无章的堆在一个文件里,写的时候很开心,但是用的时候会发现有点凌乱,尤其当数据功能需要升级时
(1)依次将学生的数据和选课功能等堆放在一起
例子:略
(2)将每个学生对象的数据单独存放进字典里

def choose_course(stu_obj):
	print(f"{stu_obj['name']}正在选课")
	...
stu1 = {
	'name':'jason',
	'age': 18,
	'gender':'male'
}
stu2=...
...

显然这种方式还是不够高度整合
(3)python为更方便地使用面向对象的思想,提供了一个专门的语法
那就是类与对象

二、类与对象

对象是数据与功能的集合体,而类是对象之间相同数据与功能的集合体

2.1 使用步骤:

① 在程序中使用时必须先定义类:即申请内存空间,将对象之间相同的数据与功能存放起来,
	类名指向该名称空间
	与函数不同,类在定义的时候就会立即执行类体代码,
	运行过程中产生的名字会丢进类的名称空间中
② 调用类来产生对象,调用类的过程被称之为实例化,
本质上调用类就是产生一个与类相关联的子空间	

2.2 示例

class Student:
	school = '外婆教大'
	def choose(self):
		print('正在选课。。。')

stu1 = Student()
stu2 = Student()
stu3 = Student()

stu1.name = 'jason'
stu1.age = 18
stu1.gender = 'male'
stu2.name = 'tom'
stu2.age = 20
stu2.gender = 'male'
stu3.name = 'red'
stu3.age = 19
stu3.gender = 'female'
print(stu1.__dict__)  # {'name': 'cc', 'age': 25, 'gender': 'male'} 会得到一个关于stu1的字典

三、初始化方法

3.1 使用类的__init__方法可以完成对空对象的初始化

class Student:
    school = "麻绳理工"
    def __init__(obj, x, y, z):
        obj.name = x
        obj.age = y
        obj.gender = z
        
    def choose_course(self):
        print("正在选课")

注意点:定义在类内的函数,不能有非None的返回值,不然会与类返回的对象产生冲突

3.2 调用类的步骤:

① 先创建一个与类相关联的子空间
② 自动触发__init__方法,将name,age,gender等一起传给__init__方法,完成空对象的初始化
③ 返回一个初始化好的对象,用赋值符号将对象的内存地址绑定给stu1这种变量名

3.3 调用类产生对象

stu1 = Student('jason', 18, 'male')
stu2 = Student('jimmy', 19, 'male')
stu3 = Student('red', 20, 'female')

四、属性操作

4.1 查找优先级

对象调用属性会先从对象字典里找,找不到就去类的字典里找

stu1.choose_course()  # 调用类里的函数,等同于choose_course(stu1)

4.2 类属性操作

类与对象都可以用.来访问属性并完成增删改查的操作
① 访问类的数据属性
可以作出修改,改完后,所有的对象调用时全都会跟着改

Student.school = "贱桥大学"  # 调用数据属性,并作出修改

② 访问类的函数属性
类.函数名()的方式调用函数,就是一个普通的函数调用方法,不会自动传入self参数,需要手动添加

Student.choose_course(stu1)  # 调用函数choose_course

4.3 对象属性操作

① 类中定义的数据属性就是共享给所有对象使用的,所有对象访问的是同一个内存地址
② 类定义的函数是绑定给所有对象使用的,
对象调用函数会将对象作为第一个参数传入(即自动传入self参数)

stu1.choose_course()  # 不需要手动传入self参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值