J'ai du code comme ça pour Django-Tastypie:
class SpecializedResource(ModelResource):
class Meta:
authentication = MyCustomAuthentication()
class TestResource(SpecializedResource):
class Meta:
# the following style works:
authentication = SpecializedResource.authentication
# but the following style does not:
super(TestResource, meta).authentication
J'aimerais savoir quelle serait la bonne méthode pour accéder aux méta-attributs de la super-classe sans coder en dur le nom de la super-classe.
Réponses:
8 pour la réponse № 1Dans votre exemple, il semble que vous essayez de remplacer l'attribut de la méta de la super classe. Pourquoi ne pas utiliser l'héritage méta?
class MyCustomAuthentication(Authentication):
pass
class SpecializedResource(ModelResource):
class Meta:
authentication = MyCustomAuthentication()
class TestResource(SpecializedResource):
class Meta(SpecializedResource.Meta):
# just inheriting from parent meta
pass
print Meta.authentication
Sortie:
<__main__.MyCustomAuthentication object at 0x6160d10>
de sorte que la TestResource
"s meta
héritent de méta parent (ici l'attribut d'authentification).
Enfin répondant à la question:
Si vous voulez vraiment y accéder (par exemple pour ajouter des éléments à une liste de parents, etc.), vous pouvez utiliser votre exemple:
class TestResource(SpecializedResource):
class Meta(SpecializedResource.Meta):
authentication = SpecializedResource.Meta.authentication # works (but hardcoding)
ou sans Codage dur la super classe:
class TestResource(SpecializedResource):
class Meta(SpecializedResource.Meta):
authentication = TestResource.Meta.authentication # works (because of the inheritance)