/ / Wie greife ich in Python auf die Metaattribute einer Superklasse zu? - Python, Django

Wie kann ich auf die Metaattribute einer Superklasse in Python zugreifen? - Python, Django

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

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