Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中向类添加值_Python_Class_Variables - Fatal编程技术网

在Python中向类添加值

在Python中向类添加值,python,class,variables,Python,Class,Variables,假设我在Python中有以下内容: class Test(): self.value1 = 1 self.value2 = 2 def setvalue1(self, value): self.value1 = value 因此,可以通过执行以下操作设置value1: Test.setvalue1('Hola') 或 到目前为止还不错。我的问题是,我想通过在其他地方读取这些值来设置这些值,因此,例如,我可以有以下内容: A = [['Value1','Hola'],

假设我在Python中有以下内容:

class Test():
    self.value1 = 1
    self.value2 = 2

def setvalue1(self, value):
    self.value1 = value
因此,可以通过执行以下操作设置value1:

Test.setvalue1('Hola')

到目前为止还不错。我的问题是,我想通过在其他地方读取这些值来设置这些值,因此,例如,我可以有以下内容:

A = [['Value1','Hola'],['Value2','Adios']]
我希望能够运行一些功能(在伪代码中):


这可能吗?非常感谢

你可以这样做:

class Test:

    def __init__(self):
        self.val1 = 1



t = Test()
setattr(t, 'val2', 2)

print t.val2
class Test:

    def __init__(self):
        self.val1 = 1

    def setself(self, name, val):
        self.__dict__[name] = val

t = Test()
t.setself('val3', 3)

print t.val3
或者像这样:

class Test:

    def __init__(self):
        self.val1 = 1



t = Test()
setattr(t, 'val2', 2)

print t.val2
class Test:

    def __init__(self):
        self.val1 = 1

    def setself(self, name, val):
        self.__dict__[name] = val

t = Test()
t.setself('val3', 3)

print t.val3

迭代数据结构并在类的实例上使用
Test

test = Test()

data = [('Value1', 'Hola'), ('Value2', 'Adios']
for k, v in data:
    setattr(test, k, v)
顺便说一句,这种数据结构通常被认为是“键/值”对,您可以在这里使用Python字典(
dict

例如:

test = Test()

data = {"value1": "Hola", "Value2": "Adios"}
for k, v in data.items()
    setattr(test, k, v)
现在,让我们修复您的
测试
类:

class Test(object):

    def __init__(self):
        self.value1 = 1
        self.value2 = 2

    def setvalue1(self, value):
        self.value1 = value

代码的缩进是否符合预期?
setvalue1
是否是
Test
的成员?在设置
self.value1=1
时,是否未定义
self
?除非您非常确切地知道自己在做什么,否则正确的解决方案是
setattr()
,这将尊重描述符协议(计算属性)直接设置
self.\uuuu dict\uuu\uuu
wont.Hmm,很高兴知道,我会查看一下,添加无用属性是一种“修复”吗?OP类中唯一的缺陷是缩进和缺少
\uuuuu init\uuuuu
方法(或者更确切地说是直接在类级别的
\uuuu init\uuuuu
方法);我已经删除了无用的属性:)