2016-07-14 55 views
8

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?

Bu süre öğrenim piton muayene araçları geldi. yorumlardan

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.

+1

TAKS http://stackoverflow.com/questions/6412146/python-decorator-as-a-staticmethod –

+1

@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

+1

Ayrıca bkz http://stackoverflow.com/questions/111234/what-is-a-callable-in-python – Petri

cevap

0

örneği nesnesinin veri değişken (öz olarak) depolanan bir kaptır.