Domanda

setattr permette di assegnare un nome dinamicamente gli attributi di classi Python. Io sto cercando di fare qualcosa di simile con un App Engine Modello:

class MyModel(db.Model):
    def __init__(self, *args, **kwargs):
        super(MyModel, self).__init__(*args, **kwargs)

        # Doesn't fully work
        setatr(self, 'prop1', db.ListProperty(db.Key))
        setatr(self, 'prop2', db.StringListProperty())

    # Works fully
    # prop1 = db.ListProperty(db.Key))
    # prop2 = db.StringListProperty())

Questo codice compila, ma quando chiamo model.prop1.append(key) più tardi, ottengo questo errore:

AttributeError: 'ListProperty' object has no attribute 'append'

ho il sospetto che questo è perché prop1 è dichiarata in modelli anziché self.prop1, ma non comprendere appieno il significato della sintassi.

Qualcuno ha compiuto questo, o qualcuno ha qualche comprensione delle differenze sintattiche?

È stato utile?
scroll top