【问题标题】:Why does Python remap my attribute name? [duplicate]为什么 Python 会重新映射我的属性名称? [复制]
【发布时间】:2018-03-29 18:41:10
【问题描述】:

如果我在 Python 中运行它

class Boo(object):
    def __init__(self, x):
        self._x = x
        self.__bingo = 3
        self._info = {'x': x, 'y':42}
    def __dir__(self):
        return ['x']
    @property
    def x(self):
        return self._x
    @property
    def z(self):
        return self._x+1
    def __getattr__(self, key):
        return self._info[key]

b = Boo(44)
b.__dict__.keys()

然后打印出来

['_info', '_Boo__bingo', '_x']

为什么__bingo 被重命名?双下划线属性是否保留?

【问题讨论】:

  • 因为正是你告诉 Python 要做的事情。你从哪里得到使用双下划线的想法?你是不是偶然发现了这种行为?或者您是否一直在关注一些告诉您双下划线是“私有”的教程?
  • 我对这个被标记为重复没有问题,但linked question 只是与这个问题有切线相关。 an answer in that question 确实回答了我的问题。
  • @juanpa.arrivillaga 我偶然发现了这种行为,并想知道为什么,这正是我的问题所陈述的。 (顺便说一句,你的评论有点傲慢。)
  • 这是一个诚实的问题。不幸的是,有很多 Python 教程和至少几本教科书告诉人们使用双下划线名称修饰,就像 Java 或 C++ 中的私有访问修饰符一样。
  • 哦,好的。我考虑使用它的原因是一个单独的问题(当我有机会时我可能会问这个问题 - 不幸的是,这个社区不容忍曲折的问题,这正是现实生活中当有人试图理解某些事情时发生的事情他们不清楚,所以我要问的唯一方法是我是否有时间专注并仔细询问。)

标签: python python-2.7 magic-methods


【解决方案1】:

这与 mangling 有关,python 的解释器就是这样做的。这是一篇关于它的文章。

https://shahriar.svbtle.com/underscores-in-python

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2012-10-13
  • 2021-06-15
  • 2015-06-09
相关资源
最近更新 更多