类(Class)是用来描述具有相同属性和方法的对象的集合。
它定义了该集合中每个对象所共有的属性和方法。
类是面向对象编程语言中最基本的概念。
对象是类的实例。
在Python中,我们使用class语句来创建一个新类,class之后为类的名称并以冒号“:”结尾。
具体格式如下:
和函数定义时类似,我们也可以在第一行放一个文档字符串,起到类的描述和帮助信息的作用。
class_suite由类成员、方法、数据属性组成。
下面我们来看一个例子:
我们定义了一个叫DeepLearner的类,我们通过class这个关键词进行定义,后面是类的名称DeepLearner,括号中的object是这个类所集成的对象类,然后是一个冒号“:”,第一行深红色的字就是我们前面提到的这个类的帮助文档。
下面定义了一个变量learnerCount,它的初始值为0。这个变量是这个类的属性,这个变量的值将在这个类中所有的实例之间共享。也就是说,不管你新建了多少个实例,它们访问到的是同一个变量。可以通过“类名.变量名”进行访问。
然后定义了一个__init__()方法,它是一种特殊的方法,是类的构造函数或者说初始化方法,每当创建了这个类的实例时,就会自动地调用这个方法。
类的方法和普通的函数有一个很大的区别在于它的参数。所有类的第一个参数都是self,它所代表的就是这个实例本身。后面其他的参数可以根据你的需要来定义。
__init__()方法中有三条语句。“self.name = name”代表在这个类中有一个叫name的属性,它的值是在构建一个新的实例的时候通过外面有一个叫name的参数把值传给它。下一条语句也是同样的道理。最后这条语句就是把learnerCount这个属性的值加一。
之后我们还定义了其他几个方法:getName()就是返回这个实例name的属性值,getSchoolname()就是返回这个实例schoolName的属性值,displayCount()就是打印出learnerCount的信息,displayLearner()就是打印出学习者的姓名以及学校名。
下面我们来看几个基于这个类的调用。
打印类的帮助文档信息:
实例化和调用:
我们用DeepLearner.learnerCount得到的值为2,因为我们创建了两个实例。
之后我们分别用两个对象调用了displayCount()方法,得到的结果是一样的,因为它们共享同一个learnerCount。
然后我们又分别调用了它们的getName()和getSchoolname()方法,打印出来的结果跟我们在实例化的时候所带进去的参数是一致的。
最后我们调用了它们的displayLearner()方法,打印出来的就是根据我们定义好的参数所涉及的全部信息。
> 示例代码
# 定义一个叫做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))
# 打印类帮助文档信息
print(DeepLearner.__doc__)
# 实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式
# 新建一个对象
newLearner1 = DeepLearner('giggle','Zhejiang University')
newLearner2 = DeepLearner('sherry','Zhejiang University of Technology')
# 使用点号 . 来访问对象的属性和方法
print(DeepLearner.learnerCount)
newLearner1.displayCount()
newLearner2.displayCount()
print(newLearner1.getName(), newLearner1.getSchoolName())
print(newLearner2.getName(), newLearner2.getSchoolName())
newLearner1.displayLearner()
newLearner2.displayLearner()