面向对象(上)
3.类的定义
- 类和对象都是对现实生活中事物的抽象
- 事物包含两部分:
- 1、 数据(属性)
- 2、 行为(方法)
- 调用方法: 对象.方法名()
- 方法调用和函数调用的区别:如果是函数调用,调用时有几个形参,就会传递几个实参。如果是方法调用,默认传递一个参数,所以方法中至少得有一个形参self
- 在类代码块中,我们可以定义变量和函数
- 变量会成为该类实例的公共属性,所有的该类实例都可以通过 对象.属性名 的形式访问
- 函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名( ) 的形式访问
例如:
4. 参数self
4.1 属性和方法
- 类中定义的属性和方法都是公共的,任何该类实例都可以访问
- 属性和方法的查找流程:
当我们调用一个对象的属性时,解析器会先在当前的对象中寻找是否含有该属性,如果有,则直接返回当前的对象的属性值。如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,如果没有就报错 - 类对象和实例对象中都可以保存属性(方法):
- 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中
- 如果这个属性(方法)是某个实例独有的,则应该保存到实例对象中 设置属性:实例对象.属性名称 = ’ 属性值 ’
- 一般情况下,属性保存到实例对象中,而方法需要保存到类对象中
- 把大象装进冰箱的例子(面对对象):
- 选取对象:冰箱—>定义类:冰箱
- 冰箱的功能(方法):1.开门,2.装东西,3.关门
- 调用方法:冰箱.开门( ),冰箱.装大象( ),冰箱.关门( )
- 冰箱的属性(公共):长,宽,高…
4.2 self
- self在定义时需要定义(方法自动会补全的参数),但是在调用时会自动传入。
- self的名字并不是规定死的,但是最好还是按照约定是用self
- self总是指调用方法时的类的实例(哪个对象调用这个方法,那么这个self就代表哪个对象)
例如:p1(p2)跟self是同一个地址
例子:
面向对象(中)
1.特殊方法
-
在类中可以定义一些特殊方法也称为魔术方法
-
特殊方法都是形如 _ _xxx_ _()这种形式
-
特殊方法不需要我们人为去调用,特殊方法会在特定时候自动调用
-
_ _init_ _(): 作用:如果init方法里面有参数,在创建实例对象的时候,那么必须传递参数, 否则报错。在创建实例时自动调用init方法
-
_ _init_ _()使用场景: 为了方便,不用再创建实例的时候还需要去查看代码需要创建一些什么类型的属性(如果没有创建相应属性还会报错),而在创建实例时直接传递属性。做属性的初始化。
例如:
2.封装
- 出现封装的原因:我们需要一种方式来增强数据的安全性:
- 1.属性不能随意修改
- 2.属性不能改为任意的值
- 封装是面向对象的三大特性之一
- 封装是指隐藏对象中一些不希望被外部所访问到的属性或方法