python学习总结篇(3)——类

python本身也是一门面向对象的语言,因此类本身也是python的一大特点,这里对python中类的使用进行总结。

 

  • 关于基本类

先通过一段程序给出例子:

 1 class Restaurant():
 2     name = ""  #公有成员
 3     type = ""  #公有成员
 4     __number_served = 0  #私有成员
 5 
 6     def __init__(self,restaurant_name,cuisine_type): #如同构造函数一样,实例化对象的的时候使用
 7         self.name = restaurant_name
 8         self.type = cuisine_type
 9         self.__number_served = 0
10 #这里的self相当于c++中的this指针,指向当前对象,也就是说self本质是始终指向当前对象,其中 name,type,number_served属于这个对象的属性
11 #也就是成员。
12 
13     def describe_restaurant(self):
14         print("the restaurant is:"+self.name.title()+".")
15         print("It is main business:"+self.type.title()+".")
16 
17     def updata_people(self,number):
18         self.__number_served = number
19 
20     def open_restaurant(self):
21         #print("It is oprnninh!")
22         print("It has "+str(self.__number_served)+" customers,please wait for a moment!")
23 
24     def increment_people(self,inc_nums):
25         self.__number_served = self.__number_served + inc_nums
26 
27     def print___number_served(self): #对于私有成员的访问只能通过方法进行访问
28         print(self.__number_served)
29 
30 rest = Restaurant('shudaxia','chuan cai')
31 
32 rest.describe_restaurant()
33 rest.open_restaurant()
34 rest.number_served = 23
35 rest.open_restaurant()
36 rest.updata_people(30)
37 rest.open_restaurant()
38 rest. increment_people(25)
39 rest.open_restaurant()
40 rest.print___number_served()

 可见,在python中,定义类,仍然是

 class  类名( ):

不管是何种语言,对于一个类而言,只有两个东西:类成员(python中也叫属性)和类方法,类成员给出了这个类有哪些属性,类方法用来描述这些属性。

截取上一段代码中的前一部分如下:

 1 class Restaurant():
 2     name = ""  #公有成员
 3     type = ""  #公有成员
 4     __number_served = 0  #私有成员
 5 
 6     def __init__(self,restaurant_name,cuisine_type): #如同构造函数一样,实例化对象的的时候使用
 7         self.name = restaurant_name
 8         self.type = cuisine_type
 9         self.__number_served = 0
10 #这里的self相当于c++中的this指针,指向当前对象,也就是说self本质是始终指向当前对象,其中 name,type,number_served属于这个对象的属性
11 #也就是成员。

对于上述代码,创建了一个叫做Restaurant()的类,对于这个类,它的类成员是:name,type, 以及__number_served,这些也被称为类Restaurant的属性,其中name和type被称为公有属性,__number_served被称为私有属性。(以下划线开头的成员变量为私有成员变量),关于下划线有如下说明:

 

第六行: __init__()为类的构造函数(python中也被称为实例化函数,也就是c++中的构造函数),显然这个函数的意义是在生成对象的时候,用来实例化这个对象。

 

另外一点,所有的类函数的参数中,都有self变量,且self是作为第一个参数,实际上这个self本质上相当于是c++中的this指针,它指向了当前对象。也就说self是和当前对象进行了绑定关系。因为类方法本质是对类属性进行的操作,而这些类属性是要从属于对象的,因此,在python中以这种方式表明这层含义。


rest = Restaurant('shudaxia','chuan cai')这行代码为生成一个对象并实例化,具体的形式为

对象名 = 类名 (成员参数)
可见,在python中,并不需要通过new这种方式实例化一个对象,直接通过上述方式,即可定义并实例化一个对象。
注意,___number_served是私有成员,私有成员在类外调用不能够直接调用,也就是不能通过对象名.___number_served这种方式进行调用,而应该通过类方法进行调用,即rest.print___number_served()
 
  • 关于继承

继承也是面向对象的一个重要特性,python中字子类继承父类的方式为:

class  子类名(父类名):

通过下面的例子感受子类与父类

 在初始化的时候,如果子类没有自己的__init__,则子类会自动调用父类的__init__

 

 

 如果子类有自己的__init__,则子类不会自动调用父类的__init__

 

posted @ 2021-03-09 16:50  少年π  阅读(165)  评论(0编辑  收藏  举报