/ / Comment accéder aux méta-attributs d'une super-classe en Python? - python, django

Comment accéder aux méta-attributs d'une super-classe en Python? - python, django

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 № 1

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