python 實例方法裝飾器的型別註解問題

環境:
python: 3.11.0
pylance: “python.analysis.typeCheckingMode”: “basic”

想問以下程式中型別A、B該寫甚麼

def simple_obj_str(cls: A) -> A:
    """用來覆寫類別__str__方法的裝飾器,可使物件有簡易的字串輸出功能

    :param cls: 要裝飾的類別
    :returns: 裝飾後的類別
    """

    def to_str(self: B) -> str:
        return f'{cls.__name__}{self.__dict__}'

    cls.__str__ = to_str
    return cls

# 使用範例
@simple_obj_str
class Foo:
    pass

我嘗試過用泛型: A=type[T]、B=T 但是是錯的

我用 A = type[T]B = T 有成功執行

from typing import TypeVar, Type
T = TypeVar('T')

def simple_obj_str(cls: Type[T]) -> Type[T]:
    def to_str(self: T) -> str:
        return f'{cls.__name__}{self.__dict__}{type(cls)}{type(self)}{type(cls())}'

    cls.__str__ = to_str
    return cls

@simple_obj_str
class Foo:
    pass
a = Foo()
str(a)

執行結果
"Foo{}<class 'type'><class '__main__.Foo'><class '__main__.Foo'>"
python 是 3.9.13