Я думал, что следующий код приведет к ошибке, потому что, насколько я читал, метод в классе Python должен иметь либо «self» (или любую другую метку, но «self» по соглашению) в качестве первогоаргумент, или «cls», или аналогичный, если используется декоратор @classmethod
, или нет, если используется декоратор @staticmethod
.
Почему я не получаю ошибку при запуске этого с Python 3.5 в терминале, дажехотя test_method
не соответствует этим требованиям?Кажется, он работает как статический метод, но без декоратора.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
class MyClass:
def test_method(args):
print(args[1])
@staticmethod
def static_method():
print("static_method")
@classmethod
def class_method(cls):
print("class_method")
def main(args):
MyClass.test_method(args)
if __name__ == '__main__':
sys.exit(main(sys.argv))
Вывод:
$ python3 testscript.py "testing"
$ testing
РЕДАКТИРОВАТЬ :
Myвопрос также можно сформулировать по-другому, отвлекая внимание от self
и @staticmethod
: «Почему я получаю, казалось бы, работающий статический метод без декоратора @staticmethod?»