В Python есть несколько способов объявить метод класса, который будет и статическим, и динамическим одновременно.
Первый способ - использовать декоратор @staticmethod
, который обозначает метод класса как статический. Статический метод не требует доступа к атрибутам класса или экземпляру, он работает только с переданными ему аргументами. Он не может обращаться к другим атрибутам класса или вызывать другие методы этого класса.
class MyClass: @staticmethod def static_and_dynamic_method(arg1, arg2): # тело метода pass
Второй способ - объявить метод класса, который принимает аргумент self
. Это позволяет методу обращаться к атрибутам класса и вызывать другие методы класса, в том числе и через экземпляр класса. Этот способ делает метод и статическим, и динамическим одновременно, так как он может быть вызван как из класса, так и из экземпляра класса.
class MyClass: def static_and_dynamic_method(self, arg1, arg2): # тело метода pass
При вызове метода класса из класса без создания экземпляра:
MyClass.static_and_dynamic_method(arg1, arg2)
При вызове метода класса через созданный экземпляр класса:
my_object = MyClass() my_object.static_and_dynamic_method(arg1, arg2)
Таким образом, вы можете использовать любой из этих способов, в зависимости от того, что вам требуется от вашего метода класса - использования только переданных аргументов или возможности доступа к атрибутам класса и вызова других методов класса.