今日内容
1 面向对象介绍
2 类的定义
3 属性的写法
4 初始化对象的属性
5 初始化方法的其他用处
6 如何为类定制行为
7 什么是绑定方法或非绑定方法(简介)
一 面向对象的介绍
在说面向对象编程之前简单的说一下面向过程的编程
关注的核心是过程,过程是就是一步一步的执行步骤,既先干啥在干啥
优点:逻辑清晰 , 复杂问题简单化,流程化
缺点: 扩展性差,可维护性差
使用场景:
对扩展性要求较低的程序例如:系统内核,git,计算器
记住:不是所有程序都要面向对象,得分析具体需求
1.什么是面向对象:
面向对象是一种编程思想:面向 朝着,向着
2.对象是什么:
面向对象的关注点是对象,把你的思维方式从具体操作变成了指挥者
注意: 对象不是凭空出现的,需要我们自己先去设计对象,然后在使用对象
3.面向的对象的优点和缺点:
· 优点:
缺点:
什么是对象:
世间万物都是对象
对象:具备某种特征与行为的结合体,并且是具体存在的称之为对象
类: 某些具备相同特征和相同行为的结合体,是一种抽象的概念
类型 == 类,比如说 动物,够
特征 == 属性
行为 == 技能
那么对象和类的关系(它们的关系分为在生活中和在代码中):
在生活中:先有对象在有类
在代码中: 必须现有类,才能产生对象(因为你要提前告诉计算机这个对象是什么样的,有什么样的技能)
二 类的定义
1. 定义类的语法
class 类的名称:
类中的内容 描述属性和技能
描述属性用变量
描述行为用函数
类名称 书写规范 首先是见名知意 名称是大驼峰命名法
驼峰就是单词首字母大写 , 大驼峰是第一个字母大写,小驼峰是第一个字母小写
2. 定义对象的语法
class Person:
pass
创建对象
p = Person
三 属性的写法:
属性如何来书写:
1.属性可以写在类中:类中的属性,是所有对象的公共的
2.也可以写在对象中:对象中的属性,是每个对象独有的(不一样的)
注意:
如果类中和对象中存在同样的属性,先访问对象中的,没有在访问类中的
案例:描述一个老师类,需要包含一个公共属性和一个独特的属性
1 class Teacher:
2 school = "oldboy"
3
4 t1 = Teacher()
5 t1.name = "jack"
6 t1.age = 28
View Code
3.属性的增删改查方法
1 增加属性
2 对象变量名称.属性名称 = 属性值
3
4 删除属性
5 del 对象的变量名称.属性名称
6
7 修改
8 对象.属性 = 新的值
9
10 查看属性 访问的是对象的所有属性
11 print(对象.__dict__)
12
13 访问对象的类信息
14 print(对象.__class__)
View Code
四 初始化对象的属性
就是—init—方法
叫做初始化方法,本质上就是一个函数
特点1: 当实例化 对象时,会自动执行init方法
特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改
特点3:该函数不允许有返回值
功能:用户给对象赋初始值
案例:创建一个类具备几个属性,通过初始化方法来给他设置属性
1 class Teacher:
2 school = 'oldboy'
3
4 def __init__(self,name,age):
5 print(self)
6 self.name = name
7 self.age = age
8
9
10 t1 = Teacher('zy',19)
11 print(t1.name,t1.age)
12 print(t1)
View Code
五 初始化函数的其他用处
1.初始化函数不仅仅用于赋值
可以处理赋值以外的初始化操作
案例:
1 class PC:
2 def __init__(self,kind,price,sys):
3 self.kind = kind
4 self.price = price
5 self.sys = sys
6 # 处理赋值以外的初始化操作,比如启动BIOS啥的
7 print('启动BIOS')
8 print('启动系统分区')
9 print('加载系统界面')
10 print('启动成功')
11
12 p = PC('apple',15000,'ios')
13
14 print(p.kind,p.price,p.sys)
View Code
六 如何为类定制行为
案例:
1 class Student:
2 school = 'oldgirl'
3
4 def __init__(self,name,age,gender):
5 self.name = name
6 self.age = age
7 self.gender = gender
8
9 def say_hi(self):
10 print('hello i am a student my name is %s my age is %s my sex is %s'
11 % (self.name,self.age,self.gender))
12
13
14 stu1 = Student('ZY ',19,'male')
15 print(stu1.say_hi())
16
17 Student.say_hi(stu1)
18
19 stu1.say_hi()
View Code
七 什么是绑定方法或非绑定方法
绑定方法分为绑定类 和 绑定对象
1.绑定对象的方法:
在类中定义的函数默认都是绑定到对象的方法,但是参数第一个必须是self,表示当前对象本身,使用对象来调用,调用时会自动传入对象
2.绑定到类的方法:用classmethod装饰器
参数第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类
3.非绑定方法:用staticmethod装饰器
不与类或对象绑定,类和对象都可以调用,但是没有自动传值这么一说,就是一个普通函数
4.绑定到类的方法与绑定到对象的方法总结:
异同点:
相同点:绑定对象调用时都有自动传值的效果,绑定到谁就由谁来使用
不同点:绑定到类的方法自动传入当前类,绑定到对象的方法自动传入当前对象
注意:绑定方法中 self ,cls 可以用其他的,但是约定俗成用这个
案例:绑定到类的方法
1 class OldBoyStudent:
2 school = 'oldboy'
3 def __init__(self,name):
4 self.name = name
5
6 @classmethod # 类绑定方法
7 def show_school(cls):
8 print(cls.school)
9
10 OldBoyStudent.show_school()
View Code
案例:绑定到对象的方法(默认就是绑定给对象)
1 class OldBoyStudent:
2 school = 'oldboy'
3 def __init__(self,name):
4 self.name = name
5
6
7 def show_school(self):
8 print(self.school)
9
10 p = OldBoyStudent('zy')
11
12 p.show_school()
View Code
总结:最后来做一个小练习吧
案例:为学生类中添加一个save方法,一个get方法,save是将对象存储到文件中,get 是从文件中获取对象
1 import pickle
2
3 class Student:
4 def __init__(self,name):
5 self.name = name
6
7 def say_hi(self):
8 print('my name is %s'%(self.name))
9
10 def save(self):
11 with open(self.name,'wb') as f:
12 pickle.dump(self,f)
13
14 @staticmethod
15 def get(name):
16 with open(name,'rb') as f:
17 obj = pickle.load(f)
18 return obj
19
20
21 stu = Student('zy')
22 stu.save()
23
24 obj = Student.get('zy')
25 print(obj.name)
View Code