提问人:Sonny 提问时间:8/24/2023 最后编辑:Kilaru VasudevaSonny 更新时间:8/26/2023 访问量:44
在 python 中遍历类对象以查找具有特定属性的对象
Looping through class objects to find an object with certain attributes in python
问:
我试图找到一种方法来循环我的游戏的不同技能,我的代码如下
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 的技能“地震”的“飓风冲刺” 我还想获得 和 属性desc
amount
am
答:
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 概念的材料。
评论