class A(object): x:int = 1 def get_A(self: "A") -> int: return self.x class B(A): def __init__(self: "B"): pass class C(B): z:bool = True def set_A(self: "C", val: int) -> object: self.x = val a:A = None b:B = None c:C = None a = A() b = B() c = C() a.get_A(1) b.get_Z() c.set_A() c.set_A(False) c.set_A(None)