Вы можете получить класс и статические методы, не создавая экземпляр. Например, возьмем следующий демонстрационный класс:
class Demo(object):
def instance_method(self):
print "Called an instance method"
@classmethod
def class_method(cls):
print "Called a class method"
@staticmethod
def static_method():
print "Called a static method"
Теперь мы можем назвать два из этих методов непосредственно на классе:
>>> Demo.class_method()
Called a class method
>>> Demo.static_method()
Called a static method
Но мы не можем вызвать метод экземпляра, как мы не экземпляр для self
аргумента:
>>> Demo.instance_method()
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
Demo.instance_method()
TypeError: unbound method instance_method() must be called with Demo instance as first argument (got nothing instead)
Вы можете назвать все три типа метода на примере:
>>> instance = Demo()
>>> instance.class_method()
Called a class method
>>> instance.static_method()
Called a static method
>>> instance.instance_method()
Called an instance method
Обратите внимание, что статические методы не используют какой-либо класс или экземпляр атрибутов, поэтому они в значительной степени идентичны функциям. Если вы обнаружите, что хотите вызвать функцию без ссылки на класс или экземпляр, просто укажите его на функцию.
Если у вас есть статический метод, который вы хотите использовать отдельно от класса, * сделайте его функцией *. Что вы подразумеваете под «инициализацией» *? Вы можете обращаться к классу и статическим методам без создания экземпляра ('Mailer.do_stuff()'), но не без инициализации объекта класса (потому что до тех пор, пока это не произойдет * они не существуют *). – jonrsharpe
Да, у вас это есть, я имел в виду создание класса – micgeronimo