2016-07-14 15 views
8

Warum sind Python-Instanzmethoden aufrufbar, aber statische Methoden und Klassenmethoden nicht aufrufbar?Warum ist Python statisch/Klassenmethode nicht aufrufbar?

Ich habe folgende:

class Test(): 
    class_var = 42 

    @classmethod 
    def class_method(cls): 
     pass 

    @staticmethod 
    def static_method(): 
     pass 

    def instance_method(self): 
     pass 

for attr, val in vars(Test).items(): 
    if not attr.startswith("__"): 
     print (attr, "is %s callable" % ("" if callable(val) else "NOT")) 

Das Ergebnis ist:

static_method is NOT callable 
instance_method is callable 
class_method is NOT callable 
class_var is NOT callable 

Technisch kann dies, da Instanzmethode Objekt ein bestimmtes Attribut (nicht) in einer bestimmten Art und Weise möglicherweise eingestellt haben könnte (__call__). Warum eine solche Asymmetrie oder welchen Zweck dient sie?

Ich stieß dabei auf Python-Inspektionswerkzeuge.

Zusätzliche Bemerkungen von Kommentaren:

Die SO in den Kommentaren verknüpft answer sagt, dass die statischen/Klassenmethoden descriptors sind, die nicht aufrufbar sind. Nun bin ich gespannt, warum Deskriptoren nicht aufrufbar gemacht werden, da Deskriptoren mit bestimmten Attributen (eine von , __set__, __del___) definiert sind.

+1

ein Blick auf http://stackoverflow.com/questions/6412146/python-decorator-as-a-staticmethod –

+1

@MK. Die verknüpfte Antwort besagt, dass die static/class-Methoden Deskriptoren sind, so dass sie nicht aufrufbar sind. Warum sind die Deskriptoren nicht abrufbar? – DurgaDatta

+1

Siehe auch http://stackoverflow.com/questions/111234/what-is-a-callable-in-python – Petri

Antwort

0

Die Instanz ist der Container, in dem die Daten des Objekts in der Variablen self gespeichert sind.

Verwandte Themen