python 实例属性函数_当使用函数变量调用类实例时,Python'str'对象没有属性'name'...

我刚开始学习用python编程。我正在尝试制作一个类似于Pokemon的游戏,我正在尝试将OOP应用到a game中。

我首先创建了一个Pokemon类,并添加了类定义的属性,如name、HP、etype、attacks。”“攻击”是一个列表字典。

我现在的问题是我正试图开发一个简单的战斗引擎,在那里我可以切换口袋妖怪。因此,我创建了一个名为fight()的函数/方法。

在里面,我有一个名为current_pokemon.name的变量,所以每当我关闭pokemon时,我都可以使用新的pokemon的名称、攻击等

我使用raw_input返回一个字符串来替换当前的_pokemon,它有一个.name属性来调用pikachu实例。相反,我得到的“str”对象没有属性。为什么这不管用?当我显式地编写pikachu.attribute时,它在函数fight()之外工作。class Pokemon(object):

def __init__(self, name, HP, etype, attacks):

self.name = name

self.HP = HP

self.etype = etype

self.attacks = attacks #2 attacks with name, dmg, type and power points

geodude = Pokemon("Geodude", 100, "Ground",

attacks =

{"Tackle":["Tackle",30,"Normal","35"],

"Rollout":["Rollout",50,"Rock","20"]

})

#attacks = {attack:[attack_name, dmg, type, PP]}

pikachu = Pokemon("Pikachu", 100, "Lightning",

attacks =

{"Thunder Shock":["Thunder Shock",40,"Electric"],

"Quick Attack":["Quick Attack",40,"Normal"]

})

#selects pikachu's attack

print "Pokemon's name is", (pikachu.name)

print "Pikachu's %s attack damages %d" % ((pikachu.attacks["Thunder Shock"][0]),(pikachu.attacks["Thunder Shock"][1]))

pikachu.HP = pikachu.HP - geodude.attacks["Rollout"][1]

print "Pikachu's HP is", (pikachu.HP)

pikachu.HP = pikachu.HP - geodude.attacks["Tackle"][1]

print "Pikachu's HP is", (pikachu.HP)

#Pokemon Battle test with stored variable

#Value selector - replace all var attributes using an easy function

#Use Solution 2

def fight():

current_pokemon = raw_input("pikachu or geodude? > ")

print current_pokemon.name

print current_pokemon.attacks

fight()

输出:Pokemon's name is Pikachu

Pikachu's Thunder Shock attack damages 40

Pikachu's HP is 50

Pikachu's HP is 20

pikachu or geodude? > pikachu

Traceback (most recent call last):

File "poke_game_stack.py", line 40, in

fight()

File "poke_game_stack.py", line 36, in fight

print current_pokemon.name

AttributeError: 'str' object has no attribute 'name'

请帮我解决这个简单的问题!

谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值