Python 新手 - 为什么 self._ 在 Python 中导致 NameError 3
Python Newbie - Why does self._ causing a NameError in Python 3
我正在尝试学习如何在 Python 中使用 类 并通过反复试验设法使以下代码正常工作,但我不确定如何使用!似乎有时需要使用 'self.' 而在其他时候它的使用会产生错误。如果有人能解释为什么不同的代码行似乎表现如此不同
,我将不胜感激
如果我用 self._tot += self._new
替换行 self._tot += _new
然后我得到以下错误 NameError: name 'self' is not defined
.
相反,如果我用 self._tot -= _last
替换行 self._tot -= self._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() ))
正如@jonrsharpe 指出的那样,在您的 undo
方法中,您没有名为 _last
的参数,因此您收到 self._tot -= _last
.
的错误
如果从函数参数中删除 self
,您可能会收到错误 self._tot += _new with self._tot += self._new
。
此外,python 约定:对 class 属性使用下划线,而不是参数。下面的代码在命名约定方面更好。
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
我正在尝试学习如何在 Python 中使用 类 并通过反复试验设法使以下代码正常工作,但我不确定如何使用!似乎有时需要使用 'self.' 而在其他时候它的使用会产生错误。如果有人能解释为什么不同的代码行似乎表现如此不同
,我将不胜感激如果我用 self._tot += self._new
替换行 self._tot += _new
然后我得到以下错误 NameError: name 'self' is not defined
.
相反,如果我用 self._tot -= _last
替换行 self._tot -= self._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() ))
正如@jonrsharpe 指出的那样,在您的 undo
方法中,您没有名为 _last
的参数,因此您收到 self._tot -= _last
.
如果从函数参数中删除 self
,您可能会收到错误 self._tot += _new with self._tot += self._new
。
此外,python 约定:对 class 属性使用下划线,而不是参数。下面的代码在命名约定方面更好。
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