Может ли абстрактный класс заставить наследующий класс реализовать метод как статический?

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()
8
задан Matthew Lund 8 December 2011 в 21:17
поделиться