面向对象基础语法
一、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:
结果:
|