2

我有两个问题:

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) 不可行,我也会很高兴。

非常感谢!高拉夫

4

5 回答 5

3
>>> from collections import namedtuple
>>> T = namedtuple('supervar', ['v1', 'v2'])
>>> superVar = T('a', 'b')
>>> superVar.v1
'a'
>>> superVar.v2
'b'
于 2013-06-25T02:49:03.750 回答
2

为什么不为您的 subVar 创建一个字典,并让 superVar 成为 subVar 字典中的值列表?

d = {'subVar1': 'value1', 'subVar2': 'value2'}
superVar = d.values()
于 2013-06-25T02:47:37.947 回答
2

在 Python 中,赋值是语句,而不是表达式。您不能将语句链接在一起。所以(1)是不可能的。
但是,您可以在类的 __init__ 方法中使用关键字参数来获得 (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
>>> 
于 2013-06-25T02:46:57.340 回答
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']

如果你想保持秩序,你可以使用集合模块中的有序字典

于 2013-06-25T02:44:47.917 回答
1

这与杰里米边沁的回答基本相同,

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()
于 2013-06-25T02:59:54.167 回答