面向对象
- python语言是一门面向对象编程语言,
- 面向对象语言编程关注的是对象,而不是注重过程,对于面向对象来说,一切皆对象
- 面向对象的思想就是:将所有功能统一保存到对应的对象中,要使用其中的某一个功能的时候,直接找到对应的对象即可
- 这种编码方式比较容易阅读,并且易于复用
- 但是编写的过程中不太符合常规的思维,编写相对麻烦
- 类
- 类也是一个对象,类就是用来创建对象的对象
- 我们也称对象是类的实例
- 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
- 我们可以向对象在添加变量,对象中的变量称之为属性
- 语法:对象.属性名 = 属性值
- 类的定义
- 类和对象都是现实生活在事实的抽象
- 事物包含俩部分
- 1、数据(属性)
- 2、行为(方法)
- 调用方式:对象.方法名()
- 方法调用与函数调用的区别:
- 如果是函数调用,调用时有几个形参,就会传递几个实参。
- 如果是方法调用,默认传递一个参数,所有方法中至少要有一个形参。
- 属性和方法
- 类中定义的属性和方法都是公共的,任何该类实例都可以访问
- 属性和方法的查询流程
- 当调用一个对象的属性时,解析器会在当前的对象中寻找,是否含有该属性
- 如果有,则直接返回当前对象的属性值。
- 如果没有,则去当前对象的类中去寻找,如果有,就返回对象的属性值。如果类中也没有就会报错。
- 类对象和实例对象中都可以保存属性(方法)
- 如果这个属性是所有的实例共享的,则应该保存的类对象中
- 如果这个属性是某个实例独有的,则保存到实例对象中
- 一般情况下,属性保存到实例对象在,而方法需要保存到类对象中
- self
- 相信这个属性都是不陌生了
- self在定义时需要定义,但是在调用时会自动传入
- self的名字并不是规定死的,但是最好还是按照约定的是用self
- self总是指调用时的类的实例
- 面向对象三大特性: 继承、封装、多态
- 继承
- 通过继承我们可以使一个类获取到其他类中的属性和方法
- 在定义类时,可以在类名后面的括号中指定当前类的父类(超类、基类)
- 继承提高了类的复用性,让类与类之间产生关系。有了这个关系,才有了多态的特性
- 封装
- 面向对象对象三大特性之一
- 封装的原因:增强数据的安全
- 1、属性不能随意修改
- 2、属性不能改为任意值
- 封装是指隐藏对象在异乡不希望被外部所访问到的属性或方法
- 我们可以提供一个方法,这个方法是外界可以访问到的属性
- getter() 获取对象在指定的属性
- setter()用来设置对象指定的属性
- 使用封装的确增加了类定义的复杂程度,但是这种方法确保了数据的安全
- 1、隐藏属性名,是调用者无法随意修改对象中的属性
- 2、增加了getter()和setter()方法,很好的控制属性是否是只读的
- 3、但是封装不是绝对的,只是修改了属性名称,并不是外界完全无法访问
- 可以为对象的属性使⽤双下划线开头 __xxx。双下划线开头的属性,是对象 的隐藏属性,隐藏属性只能在类的内部访问,⽆法通过对象访问
- 其实隐藏属性只不过是Python⾃动为属性改了⼀个名字 --> _类名__属性 名
- 这种⽅式实际上依然可以在外部访问,所以这种⽅式我们⼀般不⽤。⼀般我 们会将⼀些私有属性以_开头
- ⼀般情况下,使⽤_开头的属性都是私有属性,没有特殊情况下不要修改私有 属性
- property装饰器
- 语法:@property,可以将方法转换为同名的只读属性,可以与所定义的属性配合使用,这样可以放在属性被修改。
- 多态
- 面向对象三大特性之一
- 字面理解就是多种形态
- 一个对象可以从不同形态去呈现
- 继承