2.25 类

类(Class)是用来描述具有相同属性和方法的对象的集合。

它定义了该集合中每个对象所共有的属性和方法。

类是面向对象编程语言中最基本的概念。

对象是类的实例。

在Python中,我们使用class语句来创建一个新类,class之后为类的名称并以冒号“:”结尾。

具体格式如下:

图2-134

和函数定义时类似,我们也可以在第一行放一个文档字符串,起到类的描述和帮助信息的作用。

class_suite由类成员、方法、数据属性组成。

下面我们来看一个例子:

图2-135

我们定义了一个叫DeepLearner的类,我们通过class这个关键词进行定义,后面是类的名称DeepLearner,括号中的object是这个类所集成的对象类,然后是一个冒号“:”,第一行深红色的字就是我们前面提到的这个类的帮助文档。

下面定义了一个变量learnerCount,它的初始值为0。这个变量是这个类的属性,这个变量的值将在这个类中所有的实例之间共享。也就是说,不管你新建了多少个实例,它们访问到的是同一个变量。可以通过“类名.变量名”进行访问。

然后定义了一个__init__()方法,它是一种特殊的方法,是类的构造函数或者说初始化方法,每当创建了这个类的实例时,就会自动地调用这个方法。

类的方法和普通的函数有一个很大的区别在于它的参数。所有类的第一个参数都是self,它所代表的就是这个实例本身。后面其他的参数可以根据你的需要来定义。

__init__()方法中有三条语句。“self.name = name”代表在这个类中有一个叫name的属性,它的值是在构建一个新的实例的时候通过外面有一个叫name的参数把值传给它。下一条语句也是同样的道理。最后这条语句就是把learnerCount这个属性的值加一。

之后我们还定义了其他几个方法:getName()就是返回这个实例name的属性值,getSchoolname()就是返回这个实例schoolName的属性值,displayCount()就是打印出learnerCount的信息,displayLearner()就是打印出学习者的姓名以及学校名。

下面我们来看几个基于这个类的调用。

打印类的帮助文档信息:

图2-136

实例化和调用:

图2-137

我们用DeepLearner.learnerCount得到的值为2,因为我们创建了两个实例。

之后我们分别用两个对象调用了displayCount()方法,得到的结果是一样的,因为它们共享同一个learnerCount。

然后我们又分别调用了它们的getName()和getSchoolname()方法,打印出来的结果跟我们在实例化的时候所带进去的参数是一致的。

最后我们调用了它们的displayLearner()方法,打印出来的就是根据我们定义好的参数所涉及的全部信息。

> 示例代码

1.py
# 定义一个叫做DeepLearner的类

class DeepLearner(object):
    'DeepLearner是深度学习者的类,这是有关这个类的帮助文档'
    
    # LearnerCount 变量是一个类的属性,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 DeepLearner.learnerCount 访问
    learnerCount = 0
    
    #__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
    # 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self
    # self 代表类的实例,参数self 在定义类的方法时是必须要的,虽然在调用时不必传入相应的参数
    def __init__(self,name,schoolName):
        self.name = name
        self.schoolName = schoolName
        DeepLearner.learnerCount = DeepLearner.learnerCount + 1
    
    def getName(self):
        return self.name
    
    def getSchoolName(self):
        return self.schoolName    
    
    def displayCount(self):
        print("Total DeepLearner count is %d" % DeepLearner.learnerCount)
    
    def displayLearner(self):
        print("Name: %s, School: %s" % (self.name,self.schoolName))   
2.py
# 打印类帮助文档信息

print(DeepLearner.__doc__)
3.py
# 实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式
# 新建一个对象

newLearner1 = DeepLearner('giggle','Zhejiang University')
newLearner2 = DeepLearner('sherry','Zhejiang University of Technology')
4.py
# 使用点号 . 来访问对象的属性和方法

print(DeepLearner.learnerCount)
newLearner1.displayCount()
newLearner2.displayCount()

print(newLearner1.getName(), newLearner1.getSchoolName())
print(newLearner2.getName(), newLearner2.getSchoolName())

newLearner1.displayLearner()
newLearner2.displayLearner()

Last updated