2010-04-20 9 views
44

Mam klasę Pythona i uruchomiłem przeciwko niej pylint. Jedna wiadomość dała było:Jak obsłużyć wiadomość pylint: Ostrzeżenie: Metoda może być funkcją

Warning: Method could be a function 

Czy to mówi mi, że byłoby lepiej, aby przenieść tę metodę z klasy, ponieważ nie używa żadnych zmiennych instancji?

W języku C# uczyniłbym to metodą statyczną. Jaka jest najbardziej pytonowa rzecz do zrobienia?

Odpowiedz

53

Przeniesienie go do funkcji jest częste, jeśli w ogóle nie dotyka klasy.

Jeżeli manipuluje atrybuty klasy, należy użyć classmethod dekorator:

@classmethod 
def spam(cls, ...): 
    # cls is the class, you can use it to get class attributes 

classmethod i staticmethod (który jest taki sam, jak były, oprócz tego, że metoda nie dostać referencję do klasy z jej pierwszy parametr) zostały wprowadzone całkiem niedawno. Oznacza to, że niektórzy programiści Pythona są używane w celu uniknięcia metod statycznych i klasowych.

Niektórzy programiści z Pythona powie, że te dekoratory tylko komplikują; inni ludzie (zwykle byli programista C# lub Java) powiedzą ci, że używanie funkcji nie jest wystarczająco zorientowane obiektowo. Myślę, że to tylko kwestia preferencji.

+4

Myślę, że "@ staticmethod" jest bardziej odpowiedni tutaj niż '' classmethod'', ponieważ najwyraźniej nie manipuluje żadnymi właściwościami klasy ani stanu. – mcepl

+0

Programiści Java również używają metod statycznych –