面向对象基础语法

 

一、dir内置函数

二、定义简单的类

三、方法中的self参数

四、初始化方法

五、内置方法和属性

 

一、dir内置函数

首先推荐一个Python的内置函数:dir()。

在Python中,对象无所不在。我们之前学习的变量、数据、函数都是对象。比如a = 10。a就是变量(引用);10就是数据。

 

 

我们前面在IPython中,通过下面的方式查看一个对象都有哪些方法:

 

 

但是,这种方式不是万能的,不能看函数或者数据都哪些方法或属性。

比如下面这个列表,按下tab键之后就没有反应。

 

再比如,定义了下面的函数。按下tab键同样没有反应。

 

本节我们学习dir()函数,通过传入变量名/函数名/数据,可以查看该对象所有的属性和方法。

 

例:

 

 

结果:

 

结果输出了一个很大的列表,里面有很多以"_ _"开头,以"_ _"结尾的方法或属性。这些都是针对这个对象,提供的内置方法或属性。这些里面有的可以直接使用,比如__doc__属性

 

 

 

二、定义一个简单的类

1. 类名采用大驼峰

2. 类中定义的方法,第一个参数必须是self

 

例1:test.py

 

结果:

 

注意:在面向对象开发中,引用的概念是同样适用的。当输出变量时,可以看到是由哪个类创建的,对象的地址是多少。

 

 

 

结果:

 

 

例2:

 

判断tom和cat1是同一只猫么?

cat1和cat2是同一只猫么?

 

结果:

 

tom和cat1不是同一只猫。cat1和cat2是同一只猫。

 

 

 

三、类方法中的self参数

1. 在Python中,如果不想修改类,想直接给类的对象增加属性。可以使用 对象名.属性 = 值的方式实现【例1】。虽然简单,但是不推荐这么做。太简单粗暴了,容易出错【例3】。类的属性也应该封装在类的内部。

2. 由哪一个对象调用的方法,方法内的self 就是哪一个对象的引用。【例2】

 

 

 

例1:编写代码,加入断点

 

 

结果:

 

可以看到执行到12行时,tom对象中有了name这个属性。

 

 

例2:

 

结果:

 

我们在13行加入断点。

 

可以发现 tom变量引用了A470这个对象。即:tom是A470这个对象的引用。

step in之后:

 

可以看到self跟tom一样,也是指向同一个对象。都是这个对象的引用。

这就说明了:由哪个对象调用的方法,类方法中的self就是这个对象的引用。

 

 

 

例3:

 

结果:

 

出错了。就是因为执行到11行的时候,name属性还没有定义,eat()方法找不到。所以不要在类外部定义属性。

 

 

四、初始化方法

使用类名()可以创建一个对象,比如 Cat()。创建对象的时候,Python解释器会自动做一下操作:

1. 在内存中分配一块空间。

2. 调用初始化方法__init__。【例1】

 

我们现在关注的就是第二件事情:初始化方法。

初始化方法的作用就是专门来定义一个类具有哪些属性的。【例2】

 

 

 

例1:创建对象的时候,会自动调用初始化方法。

 

结果:

 

并没有调用初始化方法,在创建对象时,会自动调用。

 

例2:在初始化方法中定义参数

 

结果:

 

 

五、内置方法

接下来再介绍两个对象的内置方法。

1. __del__

我们知道,使用类名创建对象时,会自动调用__init__方法。可以在初始化方法中定义对象的属性。

在Python中,还有一个跟初始化方法相对应的方法:__del__。当一个对象要销毁前,会自动调用__del__方法。

 

在开发中,如果希望一个对象离开世界之前,希望让他做一些事情,就可以用这个方法。【例1】【例2】

 

 

例1:

 

 

结果:

 

因为tom是一个全局变量。当所有代码执行完后才会销毁。

 

例2:可以使用del关键字删掉对象

 

结果:

 

 

 

2. __str__

默认情况下,在使用print(对象) 时,输出的是这个对象是由哪个类创建的,并且对象的内存地址是什么。

如果不想输出上面的信息,而是我们自定义的信息。就可以使用__str__方法。需要注意,这个方法一定要返回一个字符串。【例1】

 

例1:

 

结果: