У меня есть класс Python, который содержит ряд методов. Я хочу, чтобы у одного из этих методов был статический аналог, то есть статический метод с тем же именем, который мог бы обрабатывать больше аргументов. После некоторых поисков я обнаружил, что могу использовать декоратор @staticmethod для создания статического метода.
Проблема
Для удобства я создал сокращенный тестовый пример, воспроизводящий проблему:
Код: Выделить всё
class myclass:
@staticmethod
def foo():
return 'static method'
def foo(self):
return 'public method'
obj = myclass()
print(obj.foo())
print(myclass.foo())
Код: Выделить всё
public method
static method
Код: Выделить всё
public method
Traceback (most recent call last):
File "sandbox.py", line 14, in
print(myclass.foo())
TypeError: foo() missing 1 required positional argument: 'self'
Я тестировал эту проблему в оба Python 2.7 и 3.3, но получают одну и ту же ошибку.
Вопросы
Почему это происходит и что я могу сделать, чтобы исправить свой код, чтобы он принты:
Код: Выделить всё
public method
static method
Подробнее здесь: https://stackoverflow.com/questions/205 ... -same-name
Мобильная версия