I wasn't looking at the type stub but cmd.py itself. It has
PROMPT = '(Cmd) '
...
class Cmd:
prompt = PROMPT
...
On Sat, Jun 26, 2021 at 6:04 PM Guido van Rossum
On Sat, Jun 26, 2021 at 9:25 AM Daniel Walker
wrote: I was recently using the cmd module for a project where my CLI could connect to and interact with another host. I implemented prompt in such a way that it would show the IP address when connected. I.e.,
class MyCmd(cmd.Cmd): ...
@property def prompt(self) -> str: if self.remote_host.connected(): return f'> ({self.remote_host.ip}) ' else: return '> '
This worked perfectly fine... until I ran mypy. mypy complained because, in cmd.Cmd, prompt is a class attribute.
Looking at cmd.py, this seems like an odd design choice as all of the references to cmd are through the instance (i.e., self.prompt).
You misread the typeshed stub. Where you see these lines in cmd.pyi
class Cmd: prompt: str identchars: str ruler: str ...
those are all instance attribute declarations.
I think that you're running into a different mypy bug, which is that you can't override a plain attribute with a property in a subclass.
I think there's already a bug for that in the mypy tracker, but I can't find it right now.
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...