面向对象,之 类和对象
面向对象概念
1、面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。
2、它将对象作为程序的基本单元。将数据和处理数据的程序封装到对象中
- 优缺点
优点:① 扩展性好 ② 灵活性好 ③ 重用性好缺点:① 程序复杂度提高了 ② 无法预知结果 - 使用场景
对扩展性要求高的程序,通常是直接面向用户的,例如qq,微信 - 面向过程编程思想
关注的核心是过程,过程就是一步一步的执行优点:逻辑清晰,复杂问题简单化,流程化
缺点:扩展性差,可维护性差使用场景:对扩展性要求低的程序,例如系统内核,计算器
注意:
不是所有程序都要面向对象,具体问题具体分析 - 类和对象的概念
- 类的定义:
既类型,类别 ,是一种抽象概念 是一系列具备相同特征和相同行为的对象的集合 - 对象的定义:
就是具体存在的某个事物,具备自己的特征和行为 对象就是特征和技能的结合体 - 类和对象的关系:
类包含一系列对象 ,对象属于某个类 ;
在生活中是先有对象再有类而在程序中是先有类才能有对象,我们必须先告诉计算机这类的;
对象有什么特征有什么行为总结出一个结论:
在使用面向对象编程时,第一步就是思考需要什么样的对象,对象具备什么样的特征和行为,
从而根据 这些信息总结出需要的类型
- 类的定义:
- 如何创建类和对象
- 定义类
class 类的名称: # 类中的内容 描述属性和技能 # 描述属性用变量 # 描述行为用函数 # 类名称 书写规范 首先是见名知意 名称是大驼峰命名法 # 驼峰就是单词首字母大写,大驼峰是第一个字母大写,小驼峰是第一个字母小写
- 创建对象
class Person: pass # 定义好类之后,就可以根据Person类 创建Person 的对象 p = Person()
- 定义类
- 属性的设计和查找顺序
- 属性的设计
属性可以写在类中 类中的属性,是所有对象公共的
也可以写在对象中 对象中的属性,是每个对象独特的(不一样的) - 属性的查找顺序
如果类中和对象中存在同样的属性,先访问对象 如果没有在访问类 - 练习
练习: 描述一个老师类 需要包含 一个公共属性(学校)和 一个独特的属性(名字) class Teacher: school = "oldboy" def __init__(self, name, age): self.name = name self.age = age t1 = Teacher() t1.name = "jack" t1.age = 28
- 属性的设计
- 属性的增删改查
增加属性 对象变量名称.属性名称 = 属性值 删除属性 del 对象名称.属性名称 del stu1.age 修改 对象.属性名称 = 新的值 查看属性 print(对象.__dict__) # 访问的是对象的所有属性 访问对象的在那个类里边 print(对象.__class__) # <class '__main__.Teacher'>
- 初始化方法 init
- 定义:
用于为对象的属性设置初始值的函数 - 特点:
特点1::当实例化 对象时,会自动执行init方法
特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改
特点3:不能有返回值 - 练习
# 练习:创建一个类具备几个属性,通过初始化方法来给他设置属性 class Dog: def __init__(self,kind,color,age): self.kind = kind self.color = color self.age = age d1 = Dog("二哈","黑白",1) d1 = Dog("泰迪","棕色",2) 注意:该函数不能有任何返回值/.... 只能是None 规定如此..
- 注意:
对象的精髓就是将数据和处理数据的函数整合到一起 ,
这样一来拿到一个对象就同时拿到了需要处理的数据以及处理数据的函数
- 定义:
- 绑定方法和非绑定方法
默认情况下类中的方法都是对象绑定方法
其特殊之处在于:
当使用对象调用该函数时会自动传入对象本身,作为第一个参数
当使用类名来调用时他就是一个普通函数,有几个参数就得传几个参数 - 类绑定方法
类绑定方法用@classmethod来装饰
特殊之处:
不管用类还是对象调用,都会自动传入类本身,作为第一个参数 - 非绑定方法
或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据
语法:@staticmethod - 如何判断绑定给谁
什么时候绑定给对象:当函数逻辑需要访问对象中的数据时
什么时候绑定给类:当函数逻辑需要访问类中的数据时
- 类绑定方法