noob_saibotДумаю вы не правы. Рассмотри Ваш пример несколько иначе
class Test:
def blah(value):
print(value * 10)
Test.blah(2)
Test().blah(2)
Вы же не зря в своем примере писали blah(
e), не ясно толкьо осознанно или нет.
В примере выше согласно вашему высказыванию мы имеем статичный метод, однако это не так:
----> 6 Test().blah(2)
TypeError: blah() takes 1 positional argument but 2 were given
Дело в том что blah для класса Test это обычная функция, не прикрепленная к классу. Но когда речь идет о экземпляре класса, то это blah рассматривается не как обычная функция, а метод:
In [15]: Test.blah
Out[15]: <function __main__.Test.blah>
In [16]: Test().blah
Out[16]: <bound method Test.blah of <__main__.Test object at 0x1027bf588>>
И вполне заслуженно ожидает что blah первым аргументом будет принимать ссылку на экземпляр класса
Теперь давайте рассмотрим настоящий статичный метод:
class Test2:
@staticmethod
def blah(value):
print(value * 100)
Test2.blah(2)
Test2().blah(2)
Он отработает без ошибок и выдаст ожидаемый результат. Потому что и в случае класса и в случае экземпляра - blah будет оставаться функцией:
In [17]: Test2.blah
Out[17]: <function __main__.Test2.blah>
In [18]: Test2().blah
Out[18]: <function __main__.Test2.blah>