猿问

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

我正在尝试学习如何在 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 = 0




ConcertAttendee2 = PremiumCounter(4)#Creates ConcertAttendee2 as an instance of the 'ImprovedCounter' class



ConcertAttendee2.clear_counter()

ConcertAttendee2.add(3)

ConcertAttendee2.add(3)

ConcertAttendee2.undo()

print("Total concert attendees: " + str(ConcertAttendee2.get_total() ))


holdtom
浏览 97回答 1
1回答

BIG阳

正如@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
随时随地看视频慕课网APP

相关分类

Python
我要回答