gpt4 book ai didi

python - 如何在 Python 中使用循环将对象添加到类中?

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:21 25 4
gpt4 key购买 nike

我有一个看起来像这样的类。

class CharInStageList(object):
def __init__(self, charid, charname) :
self.charid = charid
self.charname = charname

我想在这个类(class)中添加我已有的列表。

我知道如何用正常的方式去做

charOne = CharInStageList(1,'Tim')
charTwo = CharInStageList(2,'Struppi')

这不是问题,我真正想做的是使用循环添加它们。

我以这种形式获取我的数据

((1,'Tim'),(4,'Struppi'))

((1,'Tim'),(4,'Struppi'),(5,'Nami'),(6,'Luffy'))

场景中的角色数量总是不同的。我想象的是这样一个循环

charlist = ((1,'Tim'),(4,'Struppi'))
for char in charlist
objname = CharInStageList(char[0],char[1])

像这样

我希望 objname 对于我添加到类中的每个对象自行更改。

我怎样才能得到这个效果?我只能为此使用 python 2.6.6,因为它是 maya 2013 python

编辑:

Thx @silas-ray @chepner @theodox 我进一步研究了 Dicts,这正是我所需要的
我在上面使用了@chepner 方法的修改版本。

object_dict = dict( (y, CharInStageList(x,y)) for x,y in data )

像魅力一样工作

我的测试代码是这样的

import maya.cmds as cmds
dicttest = {}

def getdata ():
global dicttest
data = ((1,'Tim'),(4,'Struppi'),(5,'Nami'),(6,'Luffy'))
dicttest = dict( (y,(x,y)) for x,y in data )

getdata()

def printtest() :
for char in dicttest:
print dicttest[char]

printtest()
dicttest.clear()

我很想用代码示例在您的答案中发表评论,但我无法在那里工作。

最佳答案

对象不会添加到类中。相反,您可以创建一个对象列表,这些对象都是同一类的所有实例,使用列表推导式并利用 *args 语法:

data = ((1,'Tim'),(4,'Struppi'),(5,'Nami'),(6,'Luffy'))
object_list = [ CharInStageList(*x) for x in data ]

也许你想要一本字典:

object_dict = dict( (y, CharInStageList(x,y)) for x,y in data )

(请注意,CharInStageList 不是该类的名称,因为它不是列表;它封装了单个字符。)

如果你真的想让 CharInStateList 成为一个字符集合,试试这样的东西,它只是一个字典的薄包装:

# Your former CharInStageList
class Character(object):
def __init__(self, charid, charname) :
self.charid = charid
self.charname = char name

class OnStageCharacters(object):
def __init__(self):
self.characters = dict()

# Index on-stage characters using their charid
def add(self, character):
self.characters[character.charid] = character

on_stage = OnStageCharacters()
for id, name in data:
on_stage.add( Character(id, name) )

关于python - 如何在 Python 中使用循环将对象添加到类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com