2016-09-23 6 views
0

Pycharm schlug vor, dass ich meine CBV-Methoden statisch machen sollte, und ich dachte "warum nicht". Aber es muss einen Grund dafür geben, dass dies nicht getan wird, sonst müssen viele Leute, die schlauer sind als ich selbst, das vorher gemacht haben. Jetzt versuche ich zu verstehen, warum es nicht gemacht wird.Warum nicht statische Methoden für CBVs verwenden?

Ich lese das Tutorial in der Dokumentation erneut, und die einzige Stelle self wird verwendet, um auf die Objekte Methoden verweisen, die selbst statisch sein könnten. Ich sehe also immer noch keinen Grund, dass sie nicht alle statisch gemacht werden sollten.

http://www.django-rest-framework.org/tutorial/3-class-based-views/

ich versuchte, sich statisch in meinem Projekt zu machen, und es schien, ohne Problem zu umgehen. Könnte mir bitte jemand erklären, warum diese Methoden nicht als eine übliche Praxis statisch gemacht werden? FBVs sind statisch, also sollten CBVs auch statische Methoden verwenden, richtig?

Antwort

0

Sie sind nicht statisch, weil es einfacher ist, mit einer Instanz einer Ansicht zu arbeiten. Normalerweise schreiben Sie beim Schreiben von staticmethod nur die Funktion an die Klasse/Instanz für eine einfachere Verwendung. Diese Funktion kennt die Instanz selbst nicht. Es ist hier nur für Namespacing Zwecke.

Aber in CBV Daten wie request, object etc auf self gespeichert, so dass es in einem der Instanzmethoden zugegriffen werden kann, ohne dass sie durch Ketten alle Anrufe Methode übergeben. Vergessen Sie nicht, dass es viele unterlagerte Methoden gibt, um mit Formular, Kontext, Vorlage usw. zu arbeiten. Und Sie müssen möglicherweise "Instanzkontext" für sie geteilt haben, um zu tun, was Sie wollen.

+0

Wenn ich richtig verstehe, ist dies syntaktischer Zucker und kann sehr gut statisch sein, wenn gewünscht, richtig? Gilt das auch für Django Rest Framework-Ansichten? Ich bin immer noch auf der Suche nach gültigen Anwendungsfällen, ich konnte nur ein verschleiertes Beispiel finden, das so aussieht, als würden sie Instanzvariablen verwenden, um sie zu verwenden: https://docs.djangoproject.com/en/1.10/topics/class -based-views/intro/# handling-forms-mit-klassenbasierten Ansichten – dtgq

+0

@DavidTan was meinst du mit syntaktischem Zucker? –