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.
ein Blick auf http://stackoverflow.com/questions/6412146/python-decorator-as-a-staticmethod –
@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
Siehe auch http://stackoverflow.com/questions/111234/what-is-a-callable-in-python – Petri