That pattern is used almost as much as multi-argument guards.

I checked the typings from DefinitelyTyped (JS equivalent of typeshed) and found the following statistics:

7501 packages
100 (1.3%) packages defining type guards
13 (0.17%) packages defining multi-argument type guards
10 (0.13%) packages defining type guards for this (self)

On Fri, Feb 12, 2021 at 12:00 AM Guido van Rossum <> wrote:
I think the use case (for x.is_foo()) is rare. And instead of writing x.is_foo(x), if you make the guard a function you can write is_foo(x).

On Thu, Feb 11, 2021 at 6:51 PM Sebastian Kreft <> wrote:
I still think that we should reconsider deferring what happens to class and instance methods.

The arguments given in seem insufficient, specially considering than the workaround provided is quite awkward.

The author suggests to write def check(self, self2) -> Typeguard[T] and call it as self.check(self).
Python-Dev mailing list --
To unsubscribe send an email to
Message archived at
Code of Conduct:

--Guido van Rossum (

Sebastian Kreft