1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
from typing import Any, Type, Union
from overrides import override
class SuperbClass:
@classmethod
def class_method(cls):
pass
@staticmethod
def static_method(param: str) -> int:
if param == "foo":
return 2
return 1
def normal_method(self, x: int, y: str = "hello", *args, **kwargs) -> bool:
return x == 1 or y == "bar" or len(args) == 3 or "zoo" in kwargs
def self_typed_method(self: "SuperbClass") -> "SuperbClass":
return self
@classmethod
def self_typed_class_method(cls: "Type[SuperbClass]") -> None:
return None
def foo(self, x) -> None:
return None
class ForwardReferencer(SuperbClass):
@override
def foo(self, x: "ForwardReferencer") -> "ForwardReferencer":
pass
class ClassMethodOverrider(SuperbClass):
@classmethod
@override
def class_method(cls):
pass
class StaticMethodOverrider(SuperbClass):
@staticmethod
@override
def static_method(param: Union[str, bool]) -> int:
return 3 if param == "bar" else 2
class NormalMethodOverrider(SuperbClass):
@override
def normal_method(self, x: int, y: str = "zoo", *args, **kwargs) -> bool:
return x % 3 == 1 or y in kwargs or x == len(args)
class OverridesWithSignatureIgnore(SuperbClass):
@override(check_signature=False)
def normal_method(self, x: int) -> bool:
return x % 2 == 1
class SelfTypedOverride(SuperbClass):
@override(check_at_runtime=True)
def self_typed_method(self: "SelfTypedOverride") -> "SelfTypedOverride":
return self
@classmethod
@override(check_at_runtime=True)
def self_typed_class_method(cls: "Type[SelfTypedOverride]") -> None:
return None
class A:
def foo(self: int):
pass
class B(A):
@override
def foo(self: str):
pass
class UntypedBaseClass:
def do_something(self, arg1, arg2=None):
pass
def test_typed_subclass_in_same_package_is_an_error():
try:
class TypedSubclass(UntypedBaseClass):
@override
def do_something(self, arg1: str, arg2: Any = None) -> Any:
pass
raise AssertionError("Should not go here")
except TypeError:
pass
def test_that_this_file_is_ok():
pass
def test_self_typed_overrides():
SelfTypedOverride().self_typed_method()
SelfTypedOverride().self_typed_class_method()
|