Care este diferența dintre @staticmethod, @classmethod și metodele de instanță în Python
Un tutorial Python aprofundat despre diferența dintre metodele de instanță, classmethod și staticmethod, explicată prin protocolul de descriptori. Arată că toate trei sunt funcții simple din dict-ul clasei și că diferența apare abia la căutarea atributului, când object.getattribute apelează get-ul descriptorului: o funcție leagă instanța într-un MethodType, classmethod leagă clasa prin care a venit căutarea, iar staticmethod returnează funcția goală. Exemple rulabile cu ieșire reală compară tipul stocat cu accesul prin clasă și prin instanță, invocă manual get ca să reproducă apelurile obișnuite, demonstrează de ce un constructor alternativ scris ca metodă de clasă returnează subclasa corectă și arată că metodele legate sunt alocate la fiecare acces, deci obj.m is obj.m este False, în timp ce func rămâne partajat. Acoperă și faptul că new este implicit o metodă statică și eroarea TypeError provocată de decoratorul lipsă.
Комментарии