object
was actually the first thing I tried too, but it would produce:
TypeError: duplicate base class object
And if I did:
SupportsRead = SupportsWrite = object()
I’d get:
TypeError: object() takes no arguments
So I figured Mock() was the most convenient object because it can be called with any arguments, although one can also do:
class M:
def __new__(*args):
return object.__new__(M)
try:
from _typeshed import SupportsRead, SupportsWrite
except ModuleNotFoundError:
SupportsRead = SupportsWrite = M()
class SupportsReadWrite(SupportsRead, SupportsWrite):
pass
At any rate this feels like an ugly workaround, having to repeat the name of every protocol in use. Better use @hauntsaninja’s useful_types
even though it’s an additional dependency (or make it part of stdlib maybe?).