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

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 模块 起名的时候 互相之间不要重名比较好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 使用C++实现ATM系统
  • ¥20 求帮,直连能连上oracle12,但是thinkphp6就是报错
  • ¥15 paddleocr运行报错
  • ¥15 怎么用 matlab 设计滞后-超前串联校正网络
  • ¥15 MFC引用C#生成的dll,将dll放置到非exe程序目录,如何操作
  • ¥15 C#创建webservice接口,三方通过多次跳转访问本方服务,获取wsdl文档,wsdl中ip地址为局域网内本机地址而非三方直接访问的地址。
  • ¥15 关于#wireshark#的问题:需要安卓app流量数据集要安卓流量做包序列长度的实验,比如某些流量是在看视频还是在发评论
  • ¥15 Smail语句如何使用判断语句跳过验证卡密界面
  • ¥15 关于#wireshark#的问题:并且能够给数据做标注,如这个流量是在看视频或者是在转账
  • ¥15 运筹优化,gurobi,python