我有两个问题:
1)我想写一个如下语句:superVar = [subVar1 = 'a', subVar2 = 'b']
在此声明之后,我想要:
superVar = ['a', 'b']
subVar1 = 'a'
subVar2 = 'b'
这在python中是否可以实现?
2)我想在类的 init 函数中执行以下操作:
self.superVar = [v1 = 'a', v2 = 'b']
在此声明之后,我想要:
self.superVar = ['a', 'b']
self.superVar.v1 = 'a'
self.superVar.v2 = 'b'
即。让'superVar'成为其他变量名称的一部分。
你可能已经猜到了,我真正想做的是上面的(2)。 (1)只是第一步,如果(2)不可能,我会很高兴。
非常感谢! 拉夫
答案 0 :(得分:3)
>>> from collections import namedtuple
>>> T = namedtuple('supervar', ['v1', 'v2'])
>>> superVar = T('a', 'b')
>>> superVar.v1
'a'
>>> superVar.v2
'b'
答案 1 :(得分:2)
你的意思是字典吗?
superVar = {'subVar1': 'a', 'subVar2': 'b'}
superVar['subVar1']
# 'a'
superVar['subVar2']
# 'b'
在课堂上:
class Foo(object):
def __init__(self, a, b):
self.superVar = {'subVar1' : a, 'subVar2' : b}
bar = Foo('one', 'two')
bar.superVar.values()
# ['one', 'two']
如果您想保留订单,可以使用收藏模块中的ordered dictionary。
答案 2 :(得分:2)
在Python中,赋值是语句,而不是表达式。您不能将语句链接在一起。所以(1)是不可能的
但是,您可以在类的__init__方法中使用keyword arguments来获取(2)中的行为:
>>> class Test:
def __init__(self, **kwargs):
print "the keyword arguments are", kwargs #kwargs is a dictionary
for x in kwargs:
setattr(self, x, kwargs[x]) #adds an attribute from kwargs to self
>>> t = Test(var1=1234,var2='hello',var3=45.234)
the keyword arguments are {'var1': 1234, 'var3': 45.234, 'var2': 'hello'}
>>> t.var1
1234
>>> t.var2
'hello'
>>> t.var3
45.234
>>>
答案 3 :(得分:2)
为什么不为subVar创建字典并使superVar成为subVar字典中的值列表?
d = {'subVar1': 'value1', 'subVar2': 'value2'}
superVar = d.values()
答案 4 :(得分:1)
这与Jeremy Bentham的答案基本相同,
class T:
def __init__(self):
self.SuperVar = {'v1':'a', 'v2':'b'}
print self.SuperVar.v1
print self.SuperVar.v2
def __setattr__(self, k, v):
class SuperVar:
def __setattr__(self, k, v):
self.__dict__[k] = v
if k == "SuperVar":
self.__dict__["SuperVar"] = SuperVar()
for k in v:
self.__dict__["SuperVar"].__setattr__(k, v[k])
else:
self.__dict__[k] = v
t = T()