Pythonのオーバーライドしたメソッドに印をつける方法


Pythonで、オーバーライドしたメソッドに、明示的に印をつけることはできないでしょうか？  
（Javaの@overrideアノテーションのようなもの、Pythonにはないでしょうか？）

[code]

    from abc import ABC, abstractmethod
    
    class BaseClass(ABC):
        @abstractmethod
        def my_method(self):
            """This is an abstract method."""
            pass
    
    class DerivedClass(BaseClass):
    #   @override ←こんな感じの印(デコレータ)はつけられないですよね？
        def my_method(self):
            """Override the abstract method to do something else."""
            # ↑かわりにDocStringに記載するのが一般的でしょうか？どんな文言にしていますか？
            print("Hello, world!")
    
[/code]




> `@override` ←こんな感じの印(デコレータ)はつけられないですよね？

適当に `override decorator` を作ってしまえばよいでしょう。

[code]

    from abc import ABC, abstractmethod
    import inspect
    
    class BaseClass(ABC):
        @abstractmethod
        def my_method(self):
            """This is an abstract method."""
            pass
    
    def override(method):
        def _override(*args, **kwargs):
            cls = getattr(inspect.getmodule(method), method.__qualname__.split('.', 1)[0], None)
            assert(any(method.__name__ in dir(c) for c in cls.__bases__))
            method(*args, **kwargs)
        return _override
    
    class DerivedClass(BaseClass):
        @override
        def my_method(self):
            """Override the abstract method to do something else."""
            print("Hello, world!")
    
    if __name__ == '__main__':
        DerivedClass().my_method()
    
[/code]




> `@override` ←こんな感じの印(デコレータ)はつけられないですよね？

適当に `override decorator` を作ってしまえばよいでしょう。

[code]

    from abc import ABC, abstractmethod
    import inspect
    
    class BaseClass(ABC):
        @abstractmethod
        def my_method(self):
            """This is an abstract method."""
            pass
    
    def override(method):
        def _override(*args, **kwargs):
            cls = getattr(inspect.getmodule(method), method.__qualname__.split('.', 1)[0], None)
            assert(any(method.__name__ in dir(c) for c in cls.__bases__))
            method(*args, **kwargs)
        return _override
    
    class DerivedClass(BaseClass):
        @override
        def my_method(self):
            """Override the abstract method to do something else."""
            print("Hello, world!")
    
    if __name__ == '__main__':
        DerivedClass().my_method()
    
[/code]

