peps icon indicating copy to clipboard operation
peps copied to clipboard

PEP 526: Name mangling doesn't take place inside the body of a module

Open amirsoroush opened this issue 2 years ago • 1 comments

Hi, In PEP 526, there is a section called "Runtime Effects of Type Annotations" which has the following code:

from typing import Dict
class Player:
    ...
players: Dict[str, Player]
__points: int

print(__annotations__)
# prints: {'players': typing.Dict[str, __main__.Player],
#          '_Player__points': <class 'int'>}

The code and the output don't match.
Name mangling only happens inside the body of the class not module. So the correct output would be:

{'players': typing.Dict[str, __main__.Player], '__points': <class 'int'>}

If we want to see the effect of name mangling we could have something like:

from typing import Dict

class Player:
    __points: int

players: Dict[str, Player]
print(__annotations__)
print(Player.__annotations__)

Or have the print(__annotations__) inside the class:

from typing import Dict

class Player:
    __points: int
    print(__annotations__)

players: Dict[str, Player]
print(__annotations__)

That would be a quick fix if you confirm.

amirsoroush avatar Mar 17 '23 18:03 amirsoroush

Not the expert here, but if I were to guess, perhaps something like the latter was intended and the indent was just not preserved correctly.

@JelleZijlstra ?

CAM-Gerlach avatar Mar 18 '23 02:03 CAM-Gerlach