Pregunta

Me sale un error type object argument after ** must be a mapping, not tuple.

Tengo este código:create_character = player.Create(**generate_player.generate())

este es player.py módulo:

class Create(object):

    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender

este es generate_player.py módulo:

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

El prompt el módulo es sólo montón de raw_inputs que devolver o cadena de enteros (int para age).

¿Por qué es regresar tuplas?Cuando ejecuto print type en generate_player módulo I get string, int, string para mis argumentos.

¿Fue útil?

Solución

El ** sintaxis requiere un la asignación de (como un diccionario);cada par clave-valor en la asignación se convierte en una palabra clave argumento.

Su generate() la función, por el contrario, devuelve una tupla, no un diccionario.Se puede pasar de una tupla como argumentos separados con sintaxis similar, utilizando sólo uno asterisco:

create_character = player.Create(*generate_player.generate())

Alternativamente, fijar su generate() función para devolver un diccionario:

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}

Otros consejos

Solo quieres un asterisco:

create_character = player.Create(*generate_player.generate())

Que está pasando una secuencia de argumentos, para que usted utilice un asterisco.El doble asterisco sintaxis es para pasar una asignación, por ejemplo, para hacer algo como esto:

player.Create(**{'name': 'Richie', 'age': 21, 'gender': 'male'})
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top