博客
关于我
12-面向对象1
阅读量:583 次
发布时间:2019-03-11

本文共 4261 字,大约阅读时间需要 14 分钟。

定义类

定义一个类,格式如下:

class 类名:

  方法列表

 

demo:定义一个Car类

In [1]: #定义一个Car类In [2]: class Car():   ...:     #方法   ...:     def getCarInfo(self):   ...:         print('车轮的数量是:%d,颜色是:%s'%(self.wheelNum,self.color))   ...:     def move(self):   ...:         print('车正在移动...')

说明:

  1.定义类时有2种,新式类和经典类,上面的Car为经典类,如果Car(object)则为新式类;

  2.类名的命名规则为“大驼峰”

创建对象

刚刚我们已经定义了一个Car类,就好比我们有了车子的图纸,那么接下来就需要交给生产工人们去创造了

在python中,可以根据已经定义的类去创建出一个一个的对象,创建对象的格式为:

  对象名 = 类名()

创建对象demo:

In [1]: #定义一个Car类In [2]: class Car():   ...:     #方法   ...:     def getCarInfo(self):   ...:         print('车轮的数量是:%d,颜色是:%s'%(self.wheelNum,self.color))   ...:     def move(self):   ...:         print('车正在移动...')   ...:         In [3]: #创建一个对象,并用变量BMW来保存它的引用In [4]: BMW =  Car()In [5]: BMW.color = '黑色'In [6]: BMW.wheelNum = 4In [7]: BMW.move()车正在移动... In [8]: print(BMW.color) 黑色 In [9]: print(BMW.wheelNum) 4

总结:

  1)BMW = Car(),这样就产生了一个Car的实例对象,此时也可以通过实例对象BMW来访问属性或者方法

  2)第一次使用BMW.color = '黑色'表示给BMW这个对象添加属性,如果后面再次出现BMW.color = xxx ,则代表对属性进行修改

  3)BMW是一个对象,它拥有属性(数据)和方法(函数)

  4)当创建一个对象时,就是用一个模子,来制造的一个实物

__init__方法

在上一节的demo中,我们已经给BMW这个对象添加2个属性,wheelNum和color,试想如果再创建一个对象的话,肯定也要对其添加属性,显然这样很费事,那么就需要有一个方法,在创建对象的时候,就顺便把这个对象的属性给设置了

__init__方法

<1>使用方法

Class 类名:     #初始化函数,用来完成一些默认的设定     def __init__(self):         pass

<2>__init__方法的调用

11 #定义汽车类           12 class Car():          13                       14     def __init__(self):                                                                              15         self.wheelNum = 4 16         self.color = '黑色' 17     def move(self):   18         print('车子在跑...') 19                       20 #创建对象             21 BMW = Car()           22 print('车的颜色为:%s'%BMW.color) 23 print('车轮胎数为:%d'%BMW.wheelNum)

总结:

  当创建完Car对象后,在没有调用__init__()方法的前提下,BMW就默认拥有了2个属性,原因是__init__()方法在被创建后,就立刻被默认调用了

想一想

既然在创建完对象后__init__()方法已经被默认执行了,那么有没有办法让对象在调用__init__()方法的时候传递一些参数呢?如果可以,是怎么样传递的呢?

11 #定义汽车类 12 class Car(): 13   14     def __init__(self,wheelNum,color): 15         self.wheelNum = wheelNum 16         self.color = color 17     def move(self): 18         print('车子在跑...') 19   20 #创建对象 21 BMW = Car(4,'白色')                                                                                  22 print('车的颜色为:%s'%BMW.color) 23 print('车轮胎数为:%d'%BMW.wheelNum) python3 test.py 车的颜色为:白色 车轮胎数为:4

总结:

  1)__init__()方法,在创建一个对象的时候默认被调用,不需要手动调用

  2)__init__(self)中, 默认有1个参数名字为slef,如果再创建对象时传递了2个实参,那么__init__(self)中除了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)

  3)__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去

魔法方法

首先看一下以下代码:

11 #定义汽车类 12 class Car(): 13       14     def __init__(self,wheelNum,color):                                                               15         self.wheelNum = wheelNum 16         self.color = color 17     def move(self): 18         print('车子在跑...') 19       20 #创建对象 21 BMW = Car(4,'白色')  22 print(BMW)    #这行代码即是将BMW使用print进行输出 23 print('车的颜色为:%s'%BMW.color) 24 print('车轮胎数为:%d'%BMW.wheelNum)

得到的结果:

python3 test.py<__main__.Car object at 0x7f2b87338940>   #这里看到的是创建出来的BMW对象在内存中的地址车的颜色为:白色车轮胎数为:4

__str__()方法

11 #定义汽车类          12 class Car():         13                      14     def __init__(self,wheelNum,color): 15         self.wheelNum = wheelNum 16         self.color = color 17     def move(self):  18         print('车子在跑...') 19                      20     def __str__(self): 21         return "车子的颜色是:%s,轮胎数是:%d"%(self.color,self.wheelNum)                           22                     23 #创建对象            24 BMW = Car(4,'白色')  25 print(BMW)           26 print('车的颜色为:%s'%BMW.color)  27 print('车轮胎数为:%d'%BMW.wheelNum)

总结:

  1)在python中方法名如果是__xxxx__()的, 那么就有特殊的功能,因此叫做“魔法”方法

  2)当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

理解self

看以下示例:

11 #定义一个类  12 class Animal():       13              14     #方法    15     def __init__(self,name):          16         self.name = name              17              18     def printName(self):              19         print('名字为:%s'%(self.name)) 20              21 #定义一个函数 22 def myPrint(animal):  23     animal.printName() 24              25 dog1 = Animal('旺财') 26 myPrint(dog1) 27 dog2 = Animal('来福') 28 myPrint(dog2)

运行结果:

名字为:旺财名字为:来福

总结:

  1)所谓的self,可以理解为自己

  2)可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思

  3)某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可

转载地址:http://npltz.baihongyu.com/

你可能感兴趣的文章
百度飞浆深度学习_卷积神经网络(思维导图手写笔记)(1:理论部分)
查看>>
VGG中1*1的卷积核相比于全连接层的好处及原因
查看>>
目标检测—RNN、Fast RNN到Faster RNN的思想增进及Faster RNN的网络结构
查看>>
函数指针介绍以及初步学习。讲解以函数为参数的函数的写法即作用
查看>>
java.security.InvalidKeyException: Illegal key size
查看>>
小程序支付踩的第一个坑
查看>>
Linux kernel pwn --- CSAW2015 StringIPC
查看>>
2020 05 02 记录思考
查看>>
2020-05-31 py执行时超时控制
查看>>
关于hostent以及in_addr结构体
查看>>
加入epoll_wait之后的简化版本
查看>>
一段强大的shellcode
查看>>
双链表相加问题
查看>>
c++复杂数据类型——结构体、共用体、枚举、匿名类型、类型别名
查看>>