python07类是用函数创建的活物

看过电影“神奇动物在哪里”的,一定知道,如果魔法师有了魔法棒,肯定会有一招,是把魔法棒变成蛇之类的神兽。

但是我不喜欢蛇,要不就变个龙吧。

class 神兽:

    def 坐骑(听觉):
        if 听觉.听见 == "求救":
            听觉.方向 = "过来"
        elif 听觉.听见 == "宝贝":
            听觉.方向 = '不过来'


我的龙 = 神兽()
我的龙.听见 = "求救"
我的龙.颜色 = "红色"

print("我的龙是",我的龙.颜色,"的")
print("如果我的龙听见我",我的龙.听见)
我的龙.坐骑()
print("那么龙就会往我这边",我的龙.方向)

我的龙.听见 = "宝贝"
print("如果我的龙听到我喊",我的龙.听见)
我的龙.坐骑()
print("那么我的龙就会",我的龙.方向)

结果是

我的龙是 红色 的
如果我的龙听见我 求救
那么龙就会往我这边 过来
如果我的龙听到我喊 宝贝
那么我的龙就会 不过来

在python魔法书里,有一个class,叫做类。如果说函数可以当成魔法棒,那么类就是魔法世界里面的神兽了。神兽既有魔法棒一样的魔法合成能力,也有属于它自己的特性。

看看我刚刚变出来的小龙就知道了,里面是有def …( )的。Def可以让神兽有自己的能力的。那么它的特性怎么来呢?魔法书里有一个def__init__(),可以让神兽更生动一些。

class 神兽:

    def __init__(坐骑,颜色,听见):
        坐骑.颜色 = 颜色
        坐骑.听见 = 听见

    def 听觉(坐骑):
        if 坐骑.听见 == "求救":
            坐骑.方向 = "过来"
        elif 坐骑.听见 == "宝贝":
            坐骑.方向 = '不过来'

我的龙 = 神兽("红色","求救")

print("我的龙是",我的龙.颜色,"的")
print("如果我的龙听见我",我的龙.听见)
我的龙.听觉()
print("那么龙就会往我这边",我的龙.方向)

我的龙.听见 = "宝贝"
print("如果我的龙听到我喊",我的龙.听见)
我的龙.听觉()
print("那么我的龙就会",我的龙.方向)

这段魔法要我自己仔细体会其中的奥秘才行。虽然结果和刚才的是一样的,但是__init__( )把神兽的属性初始化了,变出来的看着更像一个有生命的东西。init是initializing初始化的简写。

现在,对我来说,是低阶魔法师很重要很重要的一个时刻,因为后面的魔法咒语会越来越长,咒语怎么念出来的,对魔法师来讲非常非常的重要,这在魔法书上是没有说明的,python只有对每个咒语的功能注释。

这让我想起了,上学时代,老师在课堂上解释着sin,cos,tan的来历,然后就是大段大段的练习题。时间转眼过去了三十年,我已经完全忘记了,sin,cos,tan是怎么来的,忘了这段公式的用法,唯一记得的却是上课时,与同桌之间私底下的小小打闹。

想起来这些,只是自然的发现,如果一味的灌输式学习,基本上就是失败告终吧。

那这个这么有意思的魔法,怎么自学才好呢?

我想到魔法嘛,肯定要先有个想象出来的结果,例如,我想变出一个宠物……
这个应该是可以随着年龄的增长,会提高它的等级和技能的。
所以:

def __init__(宠物):
        宠物.年龄= 0
        宠物.等级="幼崽"
        宠物.技能=[]
        宠物.名字="龙猫"

现在我想要的结果应该是:幼崽(可变的)飞龙可以“飞,吐火”(可变的)

def 成长(宠物,时间):
    宠物.年龄 = 宠物.年龄 + 时间
    if 宠物.年龄 > 8:
        宠物.等级 = "成年"
    elif 宠物.年龄 > 5:
        宠物.等级 = "青年"
    elif 宠物.年龄 > 3:
        宠物.等级 = "少年"
    else:
        宠物.等级 = "幼年"

我用成长把等级变出来了。现在要变出来的是能给神兽增加技能。增加技能前,我先把这句话前面的意思说出来。

def __str__(宠物):
    坐骑 = 宠物.名字
    if len(宠物.技能) > 0:            # len()len() 方法返回对象长度或项目个数
        坐骑 = 坐骑 + "可以"
    for 加技能 in 宠物.技能:
        坐骑 = 坐骑 + 加技能 +","
    坐骑 = 坐骑.strip(",")       # strip() 方法用于移除字符串头尾指定的字符
    坐骑 = 宠物.等级 + 坐骑 + "。"
    return 坐骑

这句话说完了,意思很明显,就是:等级+名字+可变的技能,有技能的时候,坐骑就”可以”….没技能的时候就没有”可以”。技能多的时候,还有个分隔符号。

这段也没什么问题了吧。

 def 增加技能(宠物,技能):
        宠物.技能.append(技能)

增加技能就很简单了。

加上我对我的宠物的表述:

宠物=神兽()
print(宠物)
print("如果过了4年")
宠物.成长(4)
print(宠物)
宠物.增加技能("吐火")
宠物.增加技能("飞行")
print(宠物)

我看一下我完整的咒语效果吧:

class 神兽:
    def __init__(宠物):
        宠物.年龄= 0
        宠物.等级="幼崽"
        宠物.技能=[]
        宠物.名字="龙猫"

    def 成长(宠物,时间):
        宠物.年龄 = 宠物.年龄 + 时间
        if 宠物.年龄 > 8:
            宠物.等级 = "成年"
        elif 宠物.年龄 > 5:
            宠物.等级 = "青年"
        elif 宠物.年龄 > 3:
            宠物.等级 = "少年"
        else:
            宠物.等级 = "幼年"

    def __str__(宠物):
        坐骑 = 宠物.名字
        if len(宠物.技能) > 0:
            坐骑 = 坐骑 + "可以"
        for 加技能 in 宠物.技能:
            坐骑 = 坐骑 + 加技能 +","
        坐骑 = 坐骑.strip(",")
        坐骑 = 宠物.等级 + 坐骑 + "。"
        return 坐骑

    def 增加技能(宠物,技能):
        宠物.技能.append(技能)

宠物=神兽()
print(宠物)
print("如果过了4年")
宠物.成长(4)
print(宠物)
宠物.增加技能("吐火")
宠物.增加技能("飞行")
print(宠物)

结果是什么样的:

幼崽龙猫。
如果过了4年
少年龙猫。
少年龙猫可以吐火,飞行。

不错哦,我的小龙猫可以啊……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值