3

私が書いている python モジュールがインポートされると、同じモジュールで定義されたディクショナリの内容に基づいて、モジュールの一連の属性を作成したいと考えています。モジュールの辞書の一部を次に示します。

list_of_constellations = {
   0: Constellation("And", "Andromeda"),
   1: Constellation("Ant", "Antlia"),
   2: Constellation("Aps", "Apus"),
   3: Constellation("Aql", "Aquila"),
}

Constellation は名前付きタプルです。私が望むのは、名前がタプルの最初の要素であり、値がキーである名前空間に新しい属性のセットを挿入することです。したがって、インポート後、次の属性を使用できます。

import constellations

print constellations.And   # prints 0
print constellations.Ant   # prints 1

どうすればこれを行うことができますか?

4

2 に答える 2

3

モジュール自体では、globals()関数はモジュールの名前空間を辞書として返します。各名前付きタプルの最初の要素をキーとして使用して、整数値を設定します。

for key, const in list_of_constellations.items():
    globals()[const[0]] = v  # set "And" to 0, etc.

またはモジュールの外部から、モジュールにsetattr()属性を追加するために使用します。

import constellations

for key, const in constellations.list_of_constellations.items():
    setattr(constellations, constellation[0], v)  # set "And" to 0, etc.
于 2013-01-30T22:56:33.143 に答える
1

Python 2.7 では:

>>> import constellations
>>> dir(constellations)
['Constellation', 'list_of_constellations', 'namedtuple', 'namespace', ...]
>>> for key, tupl in constellations.list_of_constellations.iteritems():
>>>    setattr(constellations, tupl[0], key)
>>> dir(constellations)
['And', 'Ant', 'Aps', 'Aql', 'Constellation', 'list_of_constellations',
'namedtuple', 'namespace', ...]

Python3 の場合は、 に置き換えiteritems()ますitems()

vars(constellations).update(dict)属性を個別に設定する際に使用できます。ここdictで、 は name:value 形式で挿入される属性を含むディクショナリ オブジェクトです。

于 2013-01-30T23:15:34.553 に答える