该系列文章:
在上一篇文章《python中的数据类型(list,tuple,dict,set,None)》的1.2小节里我们就简要介绍过对象(object)跟类(class)的概念。也知道了python中内置的所有数据类型都是对象,拥有自己的方法。那么当这些内置的数据类型无法满足我们的需求时,我们如何创建我们自己的类型(type)呢?答案就是通过创建我们自己的类(class)。通过我们自己动手实现的类,我们就可以创建以这个类为模板的对象。从这样的流程来看,面向对象的编程方式是自顶而下,首先需要全盘考虑,才能创建一个足够好的模板,也即类。然后才能将类实例化为对象,通过对象中的属性来解决问题或者与其他对象互动。
创建一个最简单的类可以通过下面这样的写法:
class User:
pass
#更多代码
#更多代码
复制代码
上面的代码中class是关键字,表明我们要创建一个类了,User是我们要创建的类的名称。通过“:”和缩进来表明所有缩进的代码将会是这个类里的内容。从User类中创建一个该类的实例通过下面的写法:
"""
创建一个实例,通过类名加括号的形式,类似调用函数
"""
u=User()
复制代码
对象(客体)有自己的特征和自己可以做到的事,对应到程序里就是字段(field) 和方法(method) ,这两个都是对象的属性(attribute) 。对象的字段类似于普通变量,所不同的是对象的字段是对象独有的。对象的方法类似于普通函数,所不同的是对象的方法是对象独有的。上篇文章中我们已经见到过如何使用字段跟方法,那就是通过.
操作符。
1.0.定义方法(method)
在类中定义对象的方法(method)比较简单,跟实现普通函数类似,只有一点不同,那就是不管方法需不需要参数,你都需要把self
作为一个参数名传进去,self
这个参数在我们调用方法时我们可以直接忽略,不赋值给它。举个例子:
class User:
def hi(self):
print("hi!")
u=User()
u.hi()
"""
程序输出:
hi!
"""
复制代码
self
这个参数名是约定俗成的。在User
类的代码块里定义hi
方法时,传入的参数self
将会是某个实例(对象)本身。当u
作为User
类的实例被创建,并且通过u.hi()
调用hi
方法时,python解释器会自动将其转换成User.hi(u)
。通过传入实例(对象)本身,也即self
,方法(method)就能够访问实例的字段(filed),并对其进行操作,我们之后可以从新的例子中看到。
1.1.声明字段(field)
要在类中声明对象的字段,有一个特殊的方法(method)可以做到,那就是__init__
方法,这个方法在init
前后都要写上两个下划线__
。__init__
方法会在实例一开始创建的时候就被调用,init
是initialization
的缩写,顾名思义,就是初始化的意思。_