python面向对象(二、基础语法)

2.面相对象基础语法

2.1 dir内置函数(知道)
在Python中对象几乎是无所不在的,我们之前学习的变量、数据、函数都是对象
在Python中可以使用以下两个方法验证:
1)在标识符/数据后输入一个“.”,然后按下TAB键,iPython会提示该对象能够调用的方法列表

2)使用内置函数dir传入标识符/数据,可以查看对象内的所有属性及方法

提示:__方法名__格式的方法是Python提供的内置方法/属性,稍后会给大家介绍一些常用的内置方法/属性

提示:利用好 dir() 函数,在学习时很多内容就不需要死记硬背了

2.2 定义简单的类(只包含方法)
面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!

2.2.1 定义只包含方法的类
在Python中要定义一个只包含方法的类,语法格式如下:
方法的定义格式和之前学习过的函数几乎一样
区别在于第一个参数必须是self,大家暂时先记住,稍后介绍self
注意:类名的命名规则要符合大驼峰命名法

2.2.2 创建对象
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()

2.2.3 第一个面向对象程序
需求:小猫爱吃鱼,小猫要喝水
分析:定义一个猫类Cat;
定义两个方法eat和drink
按照需求:不需要定义属性

2.2.4 引用概念的强调
在面向对象开发中,引用的概念是同样适用的!
在Python中使用类创建对象之后,tom变量中仍然记录的是对象在内存中的地址,也就是tom变量引用了新建的猫对象
使用print输出对象变量,默认情况下,是能够输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
提示:在计算机中,通常使用十六进制表示内存地址
%d可以以10进制输出数字
%x可以以16进制输出数字

2.3 方法中的 self 参数

2.3.1 给对象增加属性
在Python中,要给对象设置属性,非常的容易,但是不推荐使用,因为:对象属性的封装应该封装在类的内部。
只需要在类的外部的代码中直接通过“.”设置一个属性即可
注意:这种方式虽然简单,但是不推荐使用!

2.3.2 使用self方法
由哪一个对象调用的方法,方法内的self就是哪一个对象的引用
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法时,程序员不需要传递self参数
在方法内部:
可以通过self. 访问对象的属性
也可以通过self. 调用其他的对象方法

在类的外部,通过变量名. 访问对象的属性和方法
在类封装的方法中,通过self. 访问对象的属性和方法

2.4 初始化方法

2.4.1 在类的外部给对象增加属性的弊端
将案例代码进行调整,先调用方法 再设置属性,观察一下执行效果

程序执行报错,类的内部调用self.name时,还没有执行到tom.name=”Tom”。因此报错
提示:
在日常开发中,不推荐在类的外部给对象增加属性
如果在运行时,没有找到属性,程序会报错
对象应该包含有哪些属性,应该封装在类的内部

2.4.2 初始化方法__init__
当使用类名()创建对象时,会自动执行以下操作:
1)为对象在内存中分配空间 — 创建对象
2)为对象的属性设置初始值 — 初始化方法(init)
这个初始化方法就是__init__方法,__init__是对象的内置方法
__init__方法是专门用来定义一个类具有哪些属性的方法!

2.4.3 在初始化方法内部定义属性
在__init__方法内部使用self.属性名 = 属性的初始值就可以定义属性
定义属性之后,再使用Cat类创建的对象,都会拥有该属性

使用类名()创建对象的时候,会自动调用初始化方法 init

2.4.4 改造初始化方法(初始化的同时设置初始值)
在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造:
1)把希望设置的属性值,定义成 init 方法的参数
2)在方法内部使用 self.属性 = 形参 接收外部传递的参数
3)在创建对象时,使用 类名(属性1, 属性2...) 调用

2.4.5 方法传参

2.4.6 方法嵌套

2.4.7 练习:银行账户

运行结果:

2.5 内置方法(特殊成员)
2.5.1 init(重要)
参考:初始化方法__init__

2.5.2 new(重要)
参考:new 方法(重写)

2.5.3 call
在执行对象()时自动调用

2.5.4 enter__和__exit
与with语句配合使用,进入with语句时执行enter,离开时执行exit

with open自动关闭文件,就是使用的该功能with语句:自动关闭文件

2.5.5 getitem
执行对象[]时,自动调用

列表和字典内部会使用__getitem__

2.5.6 setitem
执行对象[key]=value时自动调用设置数据

列表和字典内部会使用__setitem__

2.5.7 hash
执行到hash(对象)时,会自动调用,并返回一个数值

可以控制对象是否可hash,可hash的对象可以做字典的key
当字典存储数据时,自动根据key计算hash值,默认执行__hash__
可哈希:

不可哈希:

2.5.8 eq
比较相等(==)时调用,返回判断结果

同理比较大于(gt)、小于(lt)、大于等于、小于等于时,也有相应的内置函数。
对象按身高或体重进行比较或排序时,可以使用__gt__和__lt__。
另外,进行加、减、乘、除运算时,也有相应的内置函数

2.5.9 __iter__迭代器
参考:“iter”方法就是迭代器

2.5.10 del
对象销毁前,被自动调用
1)在Python中:
(1)当使用类名()创建对象时,为对象分配完空间后,自动调用 init 方法
(2)当一个对象被从内存中销毁前,会自动调用 del 方法
2)应用场景:
(1)init 改造初始化方法,可以让创建对象更加灵活
(2)del 如果希望在对象被销毁前,再做一些事情,可以使用__del__方法


3)生命周期:
a)一个对象从调用 类名() 创建,生命周期开始
b)一个对象的__del__方法一旦被调用,生命周期结束
c) 在对象的生命周期内,可以访问对象属性,或者让对象调用方法

2.5.11 str
打印对象时,输出自定义内容
在Python中,使用print输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了
注意:__str__方法必须返回一个字符串

使用__str__方法后,可以输出自定义内容:

posted on 2020-12-02 09:20  叮当2000  阅读(181)  评论(0编辑  收藏  举报