为了账号安全,请及时绑定邮箱和手机立即绑定

Python 新手 - 为什么 self._ 在 Python 3 中导致 NameError

Python 新手 - 为什么 self._ 在 Python 3 中导致 NameError

holdtom 2022-10-25 16:06:02
我正在尝试学习如何在 Python 中使用类,并通过反复试验设法使以下代码工作,但不知道如何!似乎使用了“自我”。有时需要,而在其他时候使用它会产生错误。我将非常感谢有人能解释为什么不同的代码行看起来如此不同如果我self._tot += _new用self._tot += self._newthen 替换该行,则会收到以下错误NameError: name 'self' is not defined。相反,如果我将行替换为self._tot -= self._lastthenself._tot -= _last我会收到以下错误NameError: name '_last' is not defined以这种看似相反的方式表现的代码是:-class PremiumCounter:       def __init__(self, _tot = 0):        self._tot = _tot                self._new = 0        #self._last = 0    def add(self, _new = 1):        self._tot += _new        self._last = _new    def undo(self):        self._tot -= self._last           def get_total(self):        return self._tot    def clear_counter(self):        self._tot = 0ConcertAttendee2 = PremiumCounter(4)#Creates ConcertAttendee2 as an instance of the 'ImprovedCounter' classConcertAttendee2.clear_counter()ConcertAttendee2.add(3)ConcertAttendee2.add(3)ConcertAttendee2.undo()print("Total concert attendees: " + str(ConcertAttendee2.get_total() ))
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

正如@jonrsharpe 指出的那样,在您的undo方法中,您没有名为 的参数_last,因此您会收到self._tot -= _last.


如果从函数参数中self._tot += _new with self._tot += self._new删除,您可能会收到错误消息。self


此外,python 约定:对类属性使用下划线,而不是对参数使用下划线。下面的代码在命名约定方面更好。


class PremiumCounter:   


    def __init__(self, tot = 0):

        self._tot = tot        

        self._new = 0

        #self._last = 0


    def add(self, new = 1):

        self._tot += new

        self._last = new


    def undo(self):

        self._tot -= self._last       


    def get_total(self):

        return self._tot


    def clear_counter(self):

        self._tot = 0


查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信