Python 3.2 в случае, если это имеет значение ...
Следующий код показывает, что «конкретный класс» может реализовать some_method как статический метод или метод экземпляра:
import abc
class SomeAbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def some_method(self): pass
class ValidConcreteClass1(SomeAbstractClass):
@staticmethod
def some_method():
print("foo!")
class ValidConcreteClass2(SomeAbstractClass):
def some_method(self):
print("foo!")
ValidConcreteClass1.some_method()
instance = ValidConcreteClass2()
instance.some_method()
Мой вопрос: могу ли я заставить реализацию some_method быть статическим в наследующем классе?
Я заметил @ abc.abstractstaticmethod и думал, что это был ответ, но следующий код по-прежнему работает нормально. Я бы подумал, что он отклонит ValidConreteClass2, потому что some_method не статичен:
import abc
class SomeAbstractClass(metaclass=abc.ABCMeta):
@abc.abstractstaticmethod
def some_method(self): pass
class ValidConcreteClass1(SomeAbstractClass):
@staticmethod
def some_method():
print("foo!")
class ValidConcreteClass2(SomeAbstractClass):
def some_method(self):
print("foo!")
ValidConcreteClass1.some_method()
instance = ValidConcreteClass2()
instance.some_method()