В Java у нас есть абстрактные классы и интерфейсы, в которых мы объявляем набор методов, которые будут существовать в объектах, соответствующих при взаимодействии с реализациями этого типа.
Код: Выделить всё
abstract class Foo {
abstract void fooMethod();
}
interface Bar {
void barMethod();
}
и так далее. Когда они реализуются, мы обычно добавляем аннотацию о том, что метод в классе не происходит из текущего класса с именем @Override, что указывает именно на это. Это также служит гарантией того, что компилятор сможет подтвердить, что метод действительно существует в базовом классе, потому что в противном случае компилятор завершится неудачно.
Код: Выделить всё
public class FooImpl { // note this does not have "extends Foo" as defined by above
@Override
void fooMethod() {
}
}
Код: Выделить всё
javac FooImpl.java
FooImpl.java:9: error: method does not override or implement a method from a supertype
@Override
^
1 error
На данный момент в Python 3.14 я определяю свои абстрактные классы с помощью модуля abc следующим образом
Код: Выделить всё
class Foo(abc.ABC):
@abc.abstractmethod
def fooMethod(self):
...
class FooImpl(Foo): # bogus impl
def fooMethod(self):
pass
Но мне нужен способ объявить, что этот метод унаследован, и способ сообщить среде выполнения Python, что этот метод должен существовать в базовом классе (поскольку он может быть удален позже). Есть ли эквивалент в Python 3.14 и выше?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ant-method