1、强调引用的概念在面向对象开发中,引用的概念也是适用的。在python中使用类创建对象后,该对象在内存中的地址仍然记录在tom变量中,即tom变量指的是新创建的cat对象。使用print输出对象变量。默认情况下,它可以输出这个变量引用的对象是由哪个类创建的,以及在内存中的地址(十六进制表示)。base代表内存地址。(1)十进制和十六进制都是用来表示数字的,只是表达方式不同(2)十进制和十六进制数可以来回转换%d可以输出十进制数%x可以十六进制输出数字代码:classCat:defeat(self):print("小猫喜欢吃鱼")defdrink(self):print("小猫想喝水")#创建一个名为tomtom=Cat()#调用的猫对象对象的方法tom.eat()tom.drink()#使用print输出对象变量print(tom)#使用函数id()查询数据在内存中的地址addr=id(tom)print("%d"%addr)#%d可以输出十进制的数字print("%x"%addr)#%x可以输出十六进制的数字执行结果:__main__:后面会介绍模块类型,后面会Cat详细解释一下:这是上面代码创建的cat类:object:对象的含义0x0000000002901160:内存地址Cat对象在0x0000000002901160:ob的地址cat类创建的ject为0x00000000029011602、案例进阶要求:使用Cat类创建另外一个对象black问题1:tom和black是同一个对象吗?问题2:black_2和black是什么关系?代码验证:classCat:defeat(self):print("小猫爱吃鱼")defdrink(self):print("小猫想喝水")#创建的cat对象名称为tomtom=Cat()#调用对象方法tom.eat()tom.drink()print(tom)#创建另一个对象叫blackblack=Cat()black.eat()black.drink()print(black)black_2=blackprint(black_2)执行结果:问题1答案:tom和black是同一个对象,因为从执行结果可以看出对象的地址是一样的问题2答案:black_2和black是同一个对象同一个cat,因为从执行结果可以看出对象的地址是一样的。第22行代码在内存中为black分配了一个小格子,然后给这个小格子贴上black的标签。在第29行一行代码中,让black_2等于black,想象black_2也贴在这个小格子上,不管black_2还是black,都是同一只猫。小结:在使用面向对象的开发程序时,可以只有一个类,但是使用同一个类可以创建很多不同的对象。3.方法中的self参数3.1大小写转换——给对象添加属性在python中,给对象设置属性是非常容易的。只需要在类外的代码中直接设置一个属性即可,但不推荐使用,因为对象属性的封装应该在类内部进行封装。注意:该方法虽然简单,但不推荐使用代码演示:#即可。属性名可以和赋值语句一起使用tom.name="Tom"black.name="Black"完整代码和执行结果如下:3.2使用self输出对象属性在哪个对象中调用的方法类封装的方法,方法中的self是哪个对象的引用。在类封装的方法内部,self代表当前调用该方法的对象本身。调用方法时:程序员不需要在方法内部传递self参数:可以通过self访问对象的属性。也可以通过self调用其他对象方法。使用Debugger工具在13行代码前设置断点,然后点击F7键,控制台可以看到变量tom现在指向cat对象,cat对象保存的内存地址为76A0。如果您之前添加了属性,请单击最左边的三角形以查看下面的属性。点击F7,进入第一个方法后,可以看到self也是一个cat对象,self的内存地址也是76A0,self的内存地址和tom的完全一样。利用这个断点调试,可以看出self是tom变量指向的cat对象,可以断定是哪个对象调用了方法,self是哪个对象的引用。然后如下图稍微修改一下代码:通过self访问对象的属性。您可以使用调试器工具查看执行步骤的结果。更多相关Python面向对象知识点请关注Python自学网:www.wakey.com.cn
