机器学习啥都不会
2020-07-23 07:09
采纳率: 40%
浏览 303

Python: 变量前一个_下划线有什么用?

我创建了class,当我不加下划线并调用name()函数时会出现错误'str' object is not callable.
想问一下变量加不加下划线有什么区别吗?

#这样会报错
class Test:
  def __init__ (self, name):
    self.name = name
  def name(self):
    return self.name
#这样有下划线正确输出
class Test:
  def __init__ (self, name):
    self._name = name
  def name(self):
    return self._name
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 浴火_凤凰 2020-07-23 12:13
    已采纳

    下划线是合法的命名字符 好多人可能是习惯 以下划线开头 也可能是 为了不与其他代码或者系统函数 命名冲突。
    有时候 没有意义 就像好多人写循环
    for _ in range(9);这里的下划线 如果for循环没有使用下划线的话,没有意义 只是为了使用for循环

    楼主的情况还可能是避免使用Python的关键字或者保留字
    楼主可以试试下面不加下划线的情况

    改个名字

    class Test:
      def __init__ (self, name1):
        self.name1 = name1
      def name2(self):
        return self.name1
    

    刚发现楼主的函数和变量重名了 可能是这个原因吧。
    还是建议 函数 变量 class 模块 起名的时候 互相之间不要重名比较好

    已采纳该答案
    打赏 评论
  • _name 可以理解就是一个名字,(虽然在python3的标准开发文档中说明 _variable 是一个protect类型的数据, 不过在实际应用中不是很明显)

    打赏 评论
  • LTQ777 2020-07-23 08:58

    成员变量name和成员函数name重名了

    打赏 评论
  • Timor_D 2020-07-23 09:02

    就是为了区分Python中的关键字或者关键变量,其他语音中也有类似的,假如你用Python中的一个关键字作为你的变量名,这样就会报错,就是为了避免这种情况

    打赏 评论
  • alaamo211 2020-07-23 09:29

    变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

    打赏 评论

相关推荐 更多相似问题