看过电影“神奇动物在哪里”的,一定知道,如果魔法师有了魔法棒,肯定会有一招,是把魔法棒变成蛇之类的神兽。
但是我不喜欢蛇,要不就变个龙吧。
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年
少年龙猫。
少年龙猫可以吐火,飞行。
不错哦,我的小龙猫可以啊……