Вы на правильном пути.Во-первых, абстрактные методы можно найти только в абстрактных базовых классах.Если вы намереваетесь создать экземпляр класса, вы можете его игнорировать.
Большинство методов будут методами экземпляра;вот почему вам не нужно их украшать.
Метод класса - фактически альтернативный конструктор.Если вы чувствуете необходимость в нескольких __init__
методах, то самый простой из них - __init__
, а остальные определяются как методы класса, обычно реализуемые с помощью __init__
.
class Foo:
def __init__(self, x):
self.x = x
@classmethod
def from_bar(cls, b):
return cls(b.x)
f1 = Foo(3)
b = Bar()
f2 = Foo.from_bar(b) # Create a Foo from a Bar without having to know how that actually happens
Статический метод isnэто вообще не метод.Это просто обычная функция, которую вы помещаете в класс, чтобы не загрязнять глобальное пространство имен.