Статические методы в Python?
Возможно ли иметь статические методы в Python, чтобы я мог их вызывать без инициализации класса, например:
ClassName.StaticMethod()
Да, статические методы могут быть созданы таким образом (хотя немного больше Pythonic используют символы подчеркивания вместо методов CamelCase для методов):
class ClassName(object): @staticmethod def static_method(kwarg1=None): '''return a value that is a function of kwarg1'''
Вышеупомянутое использует синтаксис декоратора. Этот синтаксис эквивалентен
class ClassName(object): def static_method(kwarg1=None): '''return a value that is a function of kwarg1''' static_method = staticmethod(static_method)
. Его можно использовать так же, как вы описали:
ClassName.static_method()
Встроенный пример статического метода
str.maketrans()
в Python 3, который была функцией в модулеstring
в Python 2.Другим вариантом, который можно использовать при описании, является
classmethod
, разница в том, что метод class получает класс как неявный первый аргумент, и если он подклассифицирован, то он получает подкласс как неявный первый аргумент.class ClassName(object): @classmethod def class_method(cls, kwarg1=None): '''return a value that is a function of the class and kwarg1'''
Обратите внимание, что
cls
не является обязательным именем для первого аргумента, но большинство опытных кодировщиков Python это плохо сделано, если вы используете что-либо еще.Они обычно используются в качестве альтернативных конструкторов.
new_instance = ClassName.class_method()
Встроенный пример:
dict.fromkeys()
:new_dict = dict.fromkeys(['key1', 'key2'])