课程首页 › 第8章 › 第46课

第46课 创建实例对象

第8章 类与对象的奥秘· 知识点:类与对象 · 原书 8.3

类已经创建好了,接下来要创建属于类的具体对象了。

插图

狗狗是Animal类的具体对象。用Python怎么实现呢?

插图

通过dog=Animal()创建了Animal类的dog对象,并且用变量dog标识了这个对象。

插图

老虎也是属于Animal类的具体对象。创建它:

插图

通过tiger=Animal()创建了Animal类的tiger对象,并且用变量tiger来标识。

插图

你来试试创建鸵鸟对象吧,看看和我写的是否一样。

插图

对象的独特属性

每个对象都具有独特的特征,在Python类中称为属性。

Python中设置对象的具体属性语法是这样的:

对象名属性名具体属性

如果要使用对象的属性,我们可以通过对象名属性名来获取。

下面来试试创建Animal类的dog对象,并且给它设置相应的属性。

插图

狗狗的属性:

名字:柯基。重量:10 kg。

腿的数量:有四条腿。

知道了狗的属性,现在我们通过Python来给dog对象设置属性。

插图

依次单击菜单栏Run→Run Module选项来运行程序,程序运行结果如下

我是一只狗狗,我的名字是:柯基,重量是,有条腿。

10 kg 4

在程序中,我们通过class Animal创建了Animal类。

通过dog=Animal()创建了Animal的实例化对象dog,并且通过属性

dog.名具体属性设置对象的相应属性。

通过dog.name获取了dog对象的name属性,通过dog.weight获取了dog对象的weight属性,通过dog. legNum获取了dog对象的legNum属性。

通过print("我是一只狗狗,我的名字是:,重量是,有

%s %d kg %d条腿。将打印相应的内容。

"%(dog.name,dog.weight,dog.legNum))

插图

接下来我们给老虎对象设置属性,设置前先看看老虎对象的属性是什么。

老虎的属性:

名字:山大王。

重量:190 kg。

腿的数量:4条腿。

用Python来设置老虎的属性吧。

插图

依次单击菜单栏Run→Run Module选项来运行程序,程序运行结果如下:

我是一只老虎,我的名字是:山大王,重量是,有条腿。

190 kg 4

在程序中都是通过对象属性名具体属性设置对象和对象的属

.=dog tiger

性,当属性数量比较多的时候,这种方式会比较烦琐。

Python提供了一个魔术方法来设置对象的属性。这个魔术方法就是函数__init__()。

插图

__init__()是Python中的特殊方法,特殊方法都是这么命名的,为了和普通方法进行区分,所以你尽量不要这样命名哦。

__init__()是初始化函数,定义在类中。

当实例化对象的时候,会调用__init__()方法设置对象的属性。这是设置对象属性的另一种方式,也是用得更多的一种方式。

一起来改造Animal类,并且初始化name、、属性。

weight legNum

插图
插图

程序运行结果如下:

我是一只狗狗,我的名字是:柯基,重量是,有条腿。

10kg 4

在Animal类中定义了__init__()方法,带有4个参数。

①第一个参数是self。

②第二个参数是属性name。

③第三个参数是weight。

④第四个参数是legNum。

在__init__()方法中,对name属性、weight属性、legNum属性进行了初始化。

插图

你有没有发现,创建dog对象的方式发生了变化,只需要将对应的属性值按照__init__()方法的顺序填入就可以了。

创建dog对象从dog=Animal()没有通过参数传值。

变成了:

柯基dog=Animal("",10,4)通过参数传了3个值。

创建dog对象的时候,将属性值"柯基作为参数传入,会自

",10,4 Python动调用__init__(self,name,weight,legNum)方法执行代码块:

插图

将dog的name属性设置为“柯基”。

将dog的weight属性设置为10。

将dog的legNum属性设置为4。

通过__init__()方法在创建dog对象的时候就把属性一起设置好了,不需要我们在后面重新设置。

是不是很棒?

插图

在__init__()函数中的self参数代表的是当前的实例对象本身。

因为Animal有多个实例对象,例如上面的dog和tiger,还可以有更多的对象。Animal类需要知道当前调用__init__()方法的是哪个实例对象,通过self传给__init__()方法,类中方法的参数第一个都是self。在dog对象中self就表示dog这个对象,在tiger对象中,self就表示tiger这个对象。

是否一定要使用self呢?其实self只是一个变量,用来表示对象本身,我们也可以将它换成其他变量,试试看可不可行。

插图

程序运行结果是这样的:

我是一只狗狗,我的名字是:柯基,重量是,有条腿。

10kg 4

在程序中,将self改成变量animal,得出了同样的结果。所以self只是约定俗成的变量。为了减少大家的理解难度,以后我们也用self,这样大家看到self就知道它代表实例对象本身了。

因为dog对象调用__init__()函数的时候,Python会自动加上当前实例对象,传入__init__()函数中。所以在__init__()函数中拿到了当前调用__init__()函数的实例对象。

我们已经创建了一个狗狗对象,并且name属性设置为柯基,但是我想给它改个名字叫作米粒。Python有两种方法对name属性进行修改:一种是通过对象名属性名具体属性值进行修改;另一种是通过方法进

.=行修改。

插图

通过对象名属性名具体属性值修改1. .=

插图

程序运行结果如下:

我是一只狗狗,我的名字是:米粒,重量是,有条腿。

10kg 4

通过dog=Animal("柯基",10,4)创建了dog实例对象,并且设置了属性

柯基",属性weight=10,属性name="legNum=4。

我们要给狗狗取一个新名字,通过dog.name="米粒"设置狗狗的name属性为米粒。

通过方法修改2.

插图

程序运行结果如下:

我是一只狗狗,我的名字是:米粒,重量是,有条腿。

10kg 4

在Animal类中增加了一个方法,用于修改name。

插图

这个方法的参数是name,接收到传入的name值之后,更新name属性。