目录
目标
类与对象
类的定义
栗子
实例化对象
属性和方法的调用
特殊的self参数
类方法的其它参数
函数与方法的区别
总结
目标
在前面的博客当中,我们已经接触了一部分封装。比如:将数据扔进列表中,这就是一个简单的封装,是数据层面的封装。把常用的代码块打包成一个函数,这也是一个封装,属于语句层面的封装。
今天,我们将学习一种更大的封装 -- 类。在后续学习中,类一般都是从模块中直接导入使用。
所以,今天我们简单了解类的概念、类的定义和类的属性与方法。
类与对象
和类密切相关的,还有一个概念,叫做对象,它们形影不离。简单来说,类表示着一类事物,对象就表示类中某一个具体的实例。
定义:类代表一些拥有相同特性与功能的事物。对象是类中的某个具体的实例。
隐喻:将人定义为一个类,“张三”就是人类的一个对象。
类的定义
在前面,我们学习了Python中定义函数的语法。与之相同,Python中也有用来定义类的语法。为了方便理解,接下来我们定义一个手机的类。
定义了一个手机的类,并命名为Phone。第4~5行,为该手机类添加了品牌和颜色。第7~10行,为该手机类添加了打电话和发短信两个功能。
# 定义一个类Phone
class Phone():
# 类的属性
brand = "夜米"
color = "蓝色"
# 类的方法
def makeCall(self):
print("拨打电话")
def sendMsg(self):
print("发送信息")
关键字
简单来说,关键字class
是用来告诉Python,我们要定义类。class
在英文中本意就是“种类”,它是定义类的固定格式。
一个空格
一个空格,是定义类的标准格式。
类名
为类定义的名称。为了区分类与函数,类的名称首字母建议大写。
括号
一对括号,定义类的标准写法。
:
一个英文冒号,表明接下来缩进的代码是属于这个类的。
缩进
四个空格,表示该代码块属于Phone这个类。
类的属性
属性,表示这个类具有的特性。简单来说,属性就是类中变量的别称。
类的方法
类的方法,表示这个类的一些功能。简单来说,方法就是类中的函数的别称。所以,私底下将方法叫做函数也是可以的。、
self参数
self是一个由程序自动传入的特殊参数。它的作用会在后面做一个简单的介绍。
栗子
定义一个类
定义一个机器类Machines,并为该类添加两个属性shape和size,值分别为"圆形"和"大"。再为该类添加两个方法,high_speed用于输出高速运转,low_speed用于输出低速运转。
# 定义一个机器类Machines
class Machines():
# 定义类的属性,形状shape为"圆形",尺寸size为"大"
shape="圆形"
size="大"
# 定义类的方法high_speed,输出高速运转
def high_speed(self):
print("高速运转")
# 定义类的方法low_speed,输出低速运转
def low_speed(self):
print("低速运转")
实例化对象
类,代表一些拥有相同特性与功能的事物,是一个抽象的统称。当我们要使用类的时候,必须通过该类创建一个具体的实例,也就是一个对象。我们把类创建对象的过程,称为实例化对象。 下面,我们通过前面定义好的Phone类,来实例化一个对象。
定义了一个Phone类,并实例化了一个对象myPhone。第13行,通过赋值的方式进行实例化对象。
# 定义一个类Phone
class Phone():
# 类的属性
brand = "夜米"
color = "蓝色"
# 类的方法
def makeCall(self):
print("拨打电话")
def sendMsg(self):
print("发送信息")
# 实例化名为myPhone的对象
myPhone = Phone()
# 输出myPhone对象
print(myPhone)
对象名
一个变量名,给对象设定的名称。示例中,myPhone
是通过类Phone创建的一个具体的对象。
类名
定义好的类名
括号
括号,表示使用Phone类,实例化一个对象。
我们可以看到,输出了一长串东西。简单来说,就是程序给对象分配了地址。其中,0x7f7d69e29610是一串地址,每次均不相同。我们后续会通过调用来查看对象具体的信息。
属性和方法的调用
当我们实例化一个对象后,这个对象就具有了该类的属性和方法。下面,我们来看看如何进行类属性和类方法的调用。
使用Phone类实例化了对象myPhone,然后调用了该对象的属性和方法。
# 定义一个类Phone
class Phone():
brand = "夜米"
color = "蓝色"
def makeCall(self):
print("拨打电话")
def sendMsg(self):
print("发送信息")
# 实例化名为myPhone的对象
myPhone = Phone()
# 输出myPhone的brand属性
print(myPhone.brand)
# 调用myPhone的makeCall方法
myPhone.makeCall()
属性的调用
属性的调用语法为:对象.属性名
示例中,myPhone是对象,紧跟句点.
和属性名brand。
方法的调用
方法的调用语法为:对象.方法名()
示例中,myPhone是对象,紧跟句点.
和方法名makeCall。方法名后还有一对小括号( )。
当我们调用属性和方法是就需要这几部:
特殊的self参数
在前面,我们说到了类方法中,会有一个参数self。简单来说,self参数代表的就是实例化生成的对象。即对象会将自己传递给self参数。如图所示,对象myPhone将自己传递给self,此时self.brand
就表示是myPhone.brand
。
类方法的其它参数
因为类中的方法,本质上也是函数。所以我们也可以在调用类方法时,在括号内传入参数。示例中,参数self会接收实例对象myPhone,而参数n接收调用方法时的实参100。
函数与方法的区别
最后,我们再来简单了解一下方法和函数的区别。函数一般直接使用,比如print()
函数。而方法使用句点表示法,紧跟在某一个对象后面使用,比如.append()
方法。
过往,我们学过的列表、字典,其实也是一种类。当然,我们在后续的编程过程中,大多数情况下,都是使用一些前辈们已经定义好的类,来实现我们的需求。
所以,对于类的定义简单了解即可,重点是要掌握类属性和类方法的调用。