文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.3 __init__ 方法
从深一层的逻辑去说,我们捕捉到精灵的那一刻应该已经起好了名字,而并非捕捉后再去设置。所以这里我们需要的是一个初始化的手段。Python中的__init__方法用于初始化类的实例对象。__init__函数的作用一定程度上与C++的构造函数相似,但并不等于。C++的构造函数是使用该函数去创建一个类的示例对象,而Python执行__init__方法时实例对象已被构造出来。__init__方法会在对象构造出来后自动执行,所以可以用于初始化我们所需要的数据属性。修改Charmander类的代码,如代码清单4-2所示。
代码清单4-2 自定义类2
class Charmander: def __init__(self,name,gender,level): self.type = ('fire',None) self.gender = gender self.name = name self.level = level self.status = [10+2*level,5+1*level,5+1*level,5+1*level,5+1*level,5+1* level] #最大 HP,攻击,防御,特攻,特防,速度 def getName(self): return self.name def getGender(self): return self.gender def getType(self): return self.type def getStatus(self): return self.status
*代码详见:示例程序/code/4-3.py
这里我们增加了几个数据属性:性别、等级、能力、属性。连同前面的名字,都放在__init__方法进行初始化。数据属性是可以使用任意数据类型的,小火龙属性是火,而精灵可能会有两个属性,如小火龙经过两次进化成为喷火龙后,属性变为火和飞行。为保持数据类型的一致性,所以我们使用元组存储,并让小火龙的第二个属性为None。由于小火龙的属性是固定的,所以在__init__的输入参数不需要type。而精灵的能力会随着等级不同而不同,所以在初始化中也需要实现这一点。我们创建实例对象测试代码:
>>>pokemon1 = Charmander('Bang','male',5) >>>pokemon2 = Charmander('Loop','female',6) >>>print pokemon1.getName(),pokemon1.getGender(),pokemon1.getStatus() Bang male [20, 10, 10, 10, 10, 10] >>>print pokemon2.getName(),pokemon2.getGender(),pokemon2.getStatus() Loop female [22, 11, 11, 11, 11, 11]
这时候创建实例对象就需要参数了,实际上这是__init__函数的参数。__init__自动将数据属性进行了初始化,然后调用相关函数能够返回我们需要的对象的数据属性。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论