在Python中向类添加值
假设我在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'],
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
方法);我已经删除了无用的属性:)