Python在方法中动态访问实例变量

时间:2015-04-27 21:35:57

标签: python list variables

我正在尝试在python中为实例列表添加一个值,但是想要从方法中动态访问它。

我不能使用字典,因为我正在尝试加快单独列表(框)的排序,而不是一个大的列表。

有人能告诉我正确的方法吗?

class Boxes:

    def __init__(self):
        self.box1 = []
        self.box2 = []
        #....
        self.box10 = []


    def addToBox(self, value):
        box = self.determineBoxToUse(value)
        ## box = 2
        varname = "box", box ## box2
        self.varname.insert(0, value)

    def determineBoxToUse(self, value):
        ## for this example returns 2
        return 2

    def dumpBox(self):
        print self.box2

Boxes = Boxes();
Boxes.addToBox("123.001234")
Boxes.dumpBox()

错误:AttributeError:Boxes实例没有属性' varname'

由于

1 个答案:

答案 0 :(得分:1)

您可以使用hasattrgetattr,但许多人可能会建议您采用不同的解决方案。

def addToBox(self, value):
    box = self.determineBoxToUse(value)
    ## box = 2
    varname = "box{}".format(box) ## box2
    if hasattr(self, varname):
        getattr(self, varname).insert(0,value)

演示:

>>> class Boxes:

    def __init__(self):
        self.box1 = []
        self.box2 = []
        #....
        self.box10 = []


    def addToBox(self, value):
        box = self.determineBoxToUse(value)
        ## box = 2
        varname = "box{}".format(box) ## box2
        if hasattr(self, varname):
            getattr(self, varname).insert(0,value)

    def determineBoxToUse(self, value):
        ## for this example returns 2
        return 2

    def dumpBox(self):
        print self.box2


>>> Boxes = Boxes()
>>> Boxes.addToBox("123.001234")
>>> Boxes.dumpBox()
['123.001234']
>>>