返回介绍

4.3 __init__ 方法

发布于 2024-01-21 22:13:25 字数 1508 浏览 0 评论 0 收藏 0

从深一层的逻辑去说,我们捕捉到精灵的那一刻应该已经起好了名字,而并非捕捉后再去设置。所以这里我们需要的是一个初始化的手段。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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文