There's little difference in your example, but suppose you created a subclass of Foo
and called the create_new
method on the subclass...
class Bar(Foo):
pass
obj = Bar.create_new()
...then this base class would cause a new Bar
object to be created...
class Foo:
@classmethod
def create_new(cls):
return cls()
...whereas this base class would cause a new Foo
object to be created...
class Foo:
@staticmethod
def create_new():
return Foo()
...so the choice would depend which behavior you want.