访问存储在字典中的对象的属性

时间:2018-03-16 01:31:01

标签: python python-2.7 object dictionary

我在类外部的函数中为类的对象设置一些属性,并将对象存储在字典中。我无法看到对象存储值的变化,将检索默认的初始化值。

class Logpkt():
    def __init__(self):
    self.a=0
    self.b=''
    self.c=''
    self.d=''
    self.e=''
    self.f=''
    self.g=''
    self.h=''
    self.i=''
    self.j=''
    self.k=''


def set_class(**kwargs):
    temp = Logpkt()
    print(kwargs)
    for attr in kwargs.keys():
        temp.attr=kwargs[attr]
        print temp.attr,kwargs[attr]
    return temp

obj={}
obj[1]=set_class(a=1,b=2)
obj[2]=set_class(c=1,d=2)
print obj[1].a
print obj[2].c

打印空白,这是默认值。在超出范围后,垃圾清理器是否从内存中删除了对象?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您需要使用setattr,例如:

代码:

def set_class(**kwargs):
    temp = Logpkt()
    for attr, value in kwargs.items():
        setattr(temp, attr, value)
    return temp

测试代码:

class Logpkt():
    def __init__(self):
        self.a = 0

        self.b = ''
        self.c = ''
        self.d = ''
        self.e = ''
        self.f = ''
        self.g = ''
        self.h = ''
        self.i = ''
        self.j = ''
        self.k = ''


def set_class(**kwargs):
    temp = Logpkt()
    print(kwargs)
    for attr, value in kwargs.items():
        setattr(temp, attr, value)
    return temp


obj = {}
obj[1] = set_class(a=1, b=2)
obj[2] = set_class(c=3, d=2)
print(obj[1].a)
print(obj[2].c)

结果:

{'a': 1, 'b': 2}
{'c': 3, 'd': 2}
1
3