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__
stay foolish,stay hungry