Python 属性错误:"元组"对象没有属性"print"



我是这个网站的新手,如果我在做一些荒谬或违反规则的事情,我很抱歉,但我有一个问题。

我是Python和编程的新手。我正在学习Python,当我锻炼时,我遇到了错误。我在这里寻找解决方案,但其中大多数都超出了我无法理解的水平。

请尝试以初学者可以理解的方式回答,谢谢。

这是代码,我得到的错误是;'属性错误:"元组"对象没有属性"打印">

感谢您的任何帮助。

import random

class Enemy:
name = "Enemy"
health = 100
damage = 5
ammo = 20
def __init__(self,name,health,damage,ammo):
self.name = name
self.health = health
self.damage = damage
self.ammo = ammo
def properties(self):
print("Properties: ")
print("Name: ",self.name)
print("Health: ",self.health)
print("Damage: ",self.damage)
print("Ammo: ",self.ammo)
def attack(self):
print(self.name + " is attacking!")
ammo_spent = random.randrange(1,10)
print(str(ammo_spent) + " ammo spent.")
self.ammo -= ammo_spent
return (ammo_spent,self.damage)
def getattacked(self,ammo_spent,damage):
print ("I've been shot!")
self.health -= (ammo_spent * damage)
def is_ammo_depleted(self):
if (self.ammo <= 0):
print (self.name + "'s ammo depleted.")
return True
return False
def check(self):
if (self.health <= 0):
print("YOU DIED.")


Enemies = []
i = 0
while (i < 9):
randomhealth = random.randrange(125,300,25)
randomdamage = random.randrange(25,100,25)
randomammo = random.randrange(20,200,20)
new_enemy = ("Enemy" + str(i+1),randomhealth,randomdamage,randomammo)
Enemies.append(new_enemy)
i += 1
for Enemy in Enemies:
Enemy.properties()

你需要创建类的实例:

Enemies = []
i = 0
while (i < 9):
randomhealth = random.randrange(125,300,25)
randomdamage = random.randrange(25,100,25)
randomammo = random.randrange(20,200,20)
# create an Enemy - not a tuple of values
new_enemy = Enemy( "Enemy {}".format(i), randomhealth, randomdamage, randomammo)
Enemies.append(new_enemy)
i += 1
for Enemy in Enemies:
Enemy.properties()

如果你在类中创建了一个__str__(self)方法,你可以"告诉"python如何打印你的类的实例:

class Enemy:
# snipped what you already had
# is used if you print(instance)
def __str__(self):
return  """Properties:
Name: {}
Health: {}
Damage: {}
Ammo:   {}""".format(self.name, self.health, self.damage, self.ammo)
# is used by lists if you print a whole list
def __repr__(self):
return str(self)

在此处阅读有关__str__的信息:对象的 python __str__

好吧,首先,不要做这样的恶作剧

i = 0
while (i < 9):
i++
// bad

for i in range(9):
// good

相反。

第二关,与

new_enemy = ("Enemy" + str(i+1),randomhealth,randomdamage,randomammo)
Enemies.append(new_enemy)

您要将元组追加到实体列表。你怎么可能期望元组具有你的实体类的属性?

所以你想改用的是

Enemies = []
for i in range(9):
randomhealth = random.randrange(125,300,25)
randomdamage = random.randrange(25,100,25)
randomammo = random.randrange(20,200,20)
new_enemy = Enemy("Enemy" + str(i+1), randomhealth, randomdamage, randomammo)
Enemies.append(new_enemy)
for Enemy in Enemies:
Enemy.print()

接下来,在最后一个 for 循环中,您将使用类名 Enemy 作为循环中的变量。这个想法很糟糕,但幸运的是你可以做小写。 那么,为什么它仍然说你的敌人类没有打印成员?由于尚未定义一个,因此将该方法称为"属性"。

for enemy in Enemies:
enemy.properties()

它有效。 但是,由于我们是python,我们可以大大简化这段代码。

最终结果:

import random

class Enemy:
def __init__(self,name,health,damage,ammo):
self.name = name
self.health = health
self.damage = damage
self.ammo = ammo
def __str__(self):
return "Properties:nName: {}nHealth: {}nDamage: {}nAmmo: {}".format(
self.name, self.health, self.damage, self.ammo)
#your other methods
Enemies = [Enemy(name="Enemy" + str(i),
health=random.randrange(125, 300, 25),
damage=random.randrange(25, 100, 25),
ammo=random.randrange(20, 200, 20))
for i in range(1, 10)]
for enemy in Enemies:
print(enemy)

最新更新