エラー_type object argument after ** must be a mapping, not Tuple
_が発生します。
私はこのコードを持っています:create_character = player.Create(**generate_player.generate())
これは_player.py
_モジュールです:
_class Create(object):
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
_
これは_generate_player.py
_モジュールです:
_import Prompt
def generate():
print "Name:"
name = Prompt.get_name()
print "Age:"
age = Prompt.get_age()
print "Gender M/F:"
gender = Prompt.get_gender()
return name, age, gender
_
Prompt
モジュールは、文字列または整数(age
の整数)を返す_raw_input
_ sの集まりです。
なぜタプルを返すのですか? _print type
_モジュールで_generate_player
_を実行すると、引数としてstring、int、stringが取得されます。
_**
_構文にはmapping(dictionaryなど)が必要です。マッピング内の各キーと値のペアがキーワード引数になります。
一方、generate()
関数は、辞書ではなくタプルを返します。 oneアスタリスクを使用するだけで、タプルを同様の構文の個別の引数として渡すことができます。
_create_character = player.Create(*generate_player.generate())
_
または、辞書を返すようにgenerate()
関数を修正します。
_def generate():
print "Name:"
name = Prompt.get_name()
print "Age:"
age = Prompt.get_age()
print "Gender M/F:"
gender = Prompt.get_gender()
return {'name': name, 'age': age, 'gender': gender}
_
あなたはただ一つのアスタリスクが欲しい:
create_character = player.Create(*generate_player.generate())
1つのアスタリスクを使用する一連の引数を渡しています。ダブルアスタリスクの構文は、たとえば次のようなことを行うために、マッピングを渡すためのものです。
player.Create(**{'name': 'Richie', 'age': 21, 'gender': 'male'})