在 python 中遍历类对象以查找具有特定属性的对象

Looping through class objects to find an object with certain attributes in python

提问人:Sonny 提问时间:8/24/2023 最后编辑:Kilaru VasudevaSonny 更新时间:8/26/2023 访问量:44

问:

我试图找到一种方法来循环我的游戏的不同技能,我的代码如下


class Skill:
  def __init__(self, user, desc, effect, ea, amount, am):
    self.user = user
    self.desc = desc
    self.effect = effect
    self.amount = amount
    self.am = am

s1 = Skill("user1", "lightning blade", "Decrease", "health", 165419, 34743)
s2 = Skill("user1", "hurricane dash", "Decrease", "Speed", 113479, 95791)
s3 = Skill("user2", "earthquake", "Increase", "attack", 163479, 35791)

#want to loop through class object to auto find "lightning blade" skill

目标是从上面的对象列表中打印/使用属性为“闪电之刃”的技能对象,当找到“闪电之刃”时,忽略同一用户和用户 2 的技能“地震”的“飓风冲刺” 我还想获得 和 属性descamountam

Python 循环 对象

评论


答:

0赞 Kilaru Vasudeva 8/24/2023 #1

如果技能对象是动态的或实时的,则可以按如下所示进行编码:

class Skill:
  skill_objs = []
  # variables like 'skill_objs' are called class variables that are common among all the objects of a particular class
  def __init__(self, user, desc, effect, ea, amount, am):
    self.user = user
    self.desc = desc
    self.effect = effect
    self.amount = amount
    self.am = am
    # 'self' here refers to the current object
    Skill.skill_objs.append(self)

s1 = Skill("user1", "lightning blade", "Decrease", "health", 165419, 34743)
s2 = Skill("user1", "hurricane dash", "Decrease", "Speed", 113479, 95791)
s3 = Skill("user2", "earthquake", "Increase", "attack", 163479, 35791)

wanted_skill_obj = None
# class variables can be accessed using the syntax <class_name>.<variable_name> like 'Skill.skill_objs'
for skill in Skill.skill_objs:
   if(skill.desc == 'lightning blade'):
      wanted_skill_obj = skill
      break;
# to get the attributes of the wanted skill
if(wanted_skill_obj == None):
   print("No skill found!")
else:
   print('desc: ',wanted_skill_obj.desc)
   print('Amount: ', wanted_skill_obj.amount)
   print('am: ', wanted_skill_obj.am)

评论

0赞 Sonny 8/24/2023
有没有办法对它进行编码,以便在我添加到类中时自动添加技能?
0赞 Kilaru Vasudeva 8/24/2023
是的,您可以在构造函数中编写该功能,即 .一种方法是创建一个类类型的列表,基本上是一个类变量,以便您可以按类名访问它,并且在构造函数中,您可以添加代码以将当前对象添加到该列表中,这样,每当您创建对象时,都会调用构造函数方法,它会自动将当前对象添加到列表中。如果您不明白,请通过评论告诉我,以便我可以使用更新的代码编辑我的答案。__init()__
0赞 Sonny 8/24/2023
我不明白,请示范,谢谢你的帮助!
0赞 Kilaru Vasudeva 8/24/2023
我添加了完整版的工作代码,如果您不清楚任何事情,请告诉我。为了更清楚起见,您可以在 Internet 上阅读一些关于构造函数、类数据成员与实例数据成员、类变量与对象变量以及其他 OOP 概念的材料。