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

狗狗是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属性。
