質問

エラ 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 モジュールはバンチの raw_inputsを返すのいずれかの文字列または整数(int用 age).

なぜそのタプルを返?する活動を行う意欲 print typegenerate_player モジュールを取得しまstring,int,string私の論争することができます。

役に立ちましたか?

解決

**構文には、マッピング辞書など)が必要です。マッピング内の各キー値のペアはキーワード引数になります。

あなたの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'})
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top