zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ACM FPGA 2019 -- Reconfigurable Convolutional Kernels for Neural Networks on FPGAs 论文解读
    VLSI基础-- 第六章 时序逻辑电路
    ISSCC-2020:GANPU 论文解读
    fabric知识梳理图解
    在浏览器端获取文件的MD5值
    mysql实现随机获取几条数据的方法
    数据仓库之Data Vault模型总结
    大数据分析基础——维度模型
    ArrayList类源码解析——ArrayList动态数组的实现细节(基于JDK8)
    Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/14506090.html
Copyright © 2011-2022 走看看