Neden piton, örnek yöntemler çağrılabilir, ancak statik yöntemleri ve sınıf yöntemleri çağrılabilir değildir? Neden python statik/sınıf yöntemi callable değil?
yaptığım aşağıdaki gibidir: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"))
sonucudur:
static_method is NOT callable
instance_method is callable
class_method is NOT callable
class_var is NOT callable
Örnek yöntemi nesne büyük olasılıkla (özel bir şekilde ayarlanmış bir özelliğini (değil) sahip olabilir, çünkü bu teknik olabilir __call__
). Neden böyle bir asimetri, ya da hangi amaca hizmet ediyor?
ek açıklamalar: SO yorumlarda bağlantılı cevaplamak
static/sınıf yöntemleri çağrılabilir değildir ki, descriptors olduğunu söyler. tanımlayıcıları çağrılabilir değildir yapılır niçin tanımlayıcılar tanımlanmış belirli nitelikler (__get__
biri __set__
, __del___
) ile sınıf olduğundan Şimdi, merak ediyorum.
TAKS http://stackoverflow.com/questions/6412146/python-decorator-as-a-staticmethod –
@MK bir bakış. Bağlantılı cevap, statik/sınıf yöntemlerinin tanımlayıcı olduklarını ve bu nedenle, bunların kalınabilir olmadığını söylüyor. Decriptors neden callable değil mi? – DurgaDatta
Ayrıca bkz http://stackoverflow.com/questions/111234/what-is-a-callable-in-python – Petri