У меня есть следующий класс с функцией:
class A:
def myfn():
print("In myfn method.")
Здесь функция не имеет self
в качестве аргумента.Он также не имеет @classmethod
или @staticmethod
в качестве декоратора.Однако он работает, если вызывается с классом:
A.myfn()
Вывод:
In myfn method.
Но выдает ошибку при вызове из любого экземпляра:
a = A()
a.myfn()
Вывод ошибки:
Traceback (most recent call last):
File "testing.py", line 16, in <module>
a.myfn()
TypeError: myfn() takes 0 positional arguments but 1 was given
возможно, потому что self
также был отправлен в качестве аргумента.
Какую функцию это будет вызывать?Это будет статическая функция?Желательно ли использовать такую функцию в классах?В чем недостаток?
Редактировать: эта функция работает только при вызове с классом, а не с объектом / экземпляром.Мой главный вопрос: как называется такая функция?
Edit2: Из ответов видно, что этот тип функций, несмотря на простейшую форму, не считается законным.Однако, поскольку ни в одном из многих ответов не упоминается ни о каком серьезном недостатке, я считаю, что это может быть полезной конструкцией, особенно для группировки моих собственных статических функций в классе, который я могу вызывать по мере необходимости.Мне не нужно создавать какой-либо экземпляр этого класса.По крайней мере, это избавляет меня от ввода @staticmethod
каждый раз и делает код менее сложным.Кроме того, это получается аккуратно для кого-то, чтобы расширить мой класс.Хотя все такие функции могут храниться на верхнем / глобальном уровне, их хранение в классе является более модульным.Тем не менее, я считаю, что должно быть определенное имя для такой простой конструкции, которая работает именно таким образом, и она должна быть признана законной.Это также может помочь новичкам понять, почему аргумент self
необходим для обычных функций в классе Python.Это только увеличит простоту этого великого языка.