Ich habe einen Code wie diesen für 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
Ich würde gerne wissen, wie auf Metaattribute der Superklasse richtig zugegriffen werden kann, ohne den Namen der Superklasse fest zu codieren.
Antworten:
8 für die Antwort № 1In Ihrem Beispiel scheint es, dass Sie versuchen, das Attribut des Metas der Superklasse zu überschreiben. Warum nicht Meta-Vererbung verwenden?
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
Ausgabe:
<__main__.MyCustomAuthentication object at 0x6160d10>
so, dass die TestResource
"s meta
erben von übergeordneten Meta (hier das Authentifizierungsattribut).
Endlich die Frage beantworten:
Wenn Sie wirklich darauf zugreifen möchten (z. B. um Daten an eine übergeordnete Liste anzuhängen usw.), können Sie Ihr Beispiel verwenden:
class TestResource(SpecializedResource):
class Meta(SpecializedResource.Meta):
authentication = SpecializedResource.Meta.authentication # works (but hardcoding)
oder ohne harte Kodierung das Super Klasse:
class TestResource(SpecializedResource):
class Meta(SpecializedResource.Meta):
authentication = TestResource.Meta.authentication # works (because of the inheritance)