Pregunta

setattr le permite nombrar dinámicamente atributos en las clases de Python. Estoy tratando de hacer algo similar con un motor Modelo Aplicación:

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())

Este código se compila, pero cuando llamo model.prop1.append(key) más adelante, me sale este error:

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

sospecho que esto se debe a que prop1 se declara en modelos en vez de self.prop1, pero no entienden completamente la importancia de la sintaxis.

¿Alguien ha logrado esto, o ¿alguien tiene alguna idea de las diferencias sintácticas?

scroll top