Python 尝试创建和使用类;名称';是空的';没有定义
我正在尝试创建一个名为Python 尝试创建和使用类;名称';是空的';没有定义,python,python-3.x,Python,Python 3.x,我正在尝试创建一个名为Stack(它对于编写实际程序可能不是很有用,我只是想学习创建类的一般知识)这是我的代码,与下面指南中的示例相同,只保存一个函数名: class Stack: def __init__(self): self.items = [] def is_empty(self): return self.items == [] def push(self,item): self.items.append(it
Stack
(它对于编写实际程序可能不是很有用,我只是想学习创建类的一般知识)这是我的代码,与下面指南中的示例相同,只保存一个函数名:
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
我将其保存在一个名为stack.py
的文件中,并使用以下内容对其进行了测试:
from stack import Stack
my_stack = Stack()
print(is_empty(my_stack))
但我得到了这个错误信息:
Mac:python mac$ python3 stacktest.py
Traceback (most recent call last):
File "stacktest.py", line 5, in <module>
print(is_empty(my_stack))
NameError: name 'is_empty' is not defined
Mac:python Mac$python3 stacktest.py
回溯(最近一次呼叫最后一次):
文件“stacktest.py”,第5行,在
打印(是空的(我的堆栈))
名称错误:未定义名称“为空”
讨论中的指南有一个叫做activecode的东西,它基本上是安装在浏览器上的Python,因此您可以在它上面运行示例程序,是空的(我的堆栈)
返回它应该返回的True
。我做错了什么
编辑:是的,它实际上是
我的\u堆栈。是空的()
。我把类和函数混为一谈,误读了指南。方法是空的()
是类的一部分。要调用它,您需要my\u stack.is\u empty()
from stack import Stack
my_stack = Stack()
print my_stack.is_empty()
应该是
my_stack.is_empty()没有定义全局名称is_empty
。但是,绑定到全局名称堆栈的类中有一个is_empty
属性。您需要使用其中一种
Stack.is_empty(my_stack)
或者更常见的用法
my_stack.is_empty().
非常好,谢谢!我现在更了解点表示法。Stack.is_empty()
除非使用@classmethod
装饰器,否则将无法工作。否则,is\u empty()
是一个实例方法,需要类的实例。is\u empty
只接受一个参数,堆栈
类的实例。无论您是像第一个示例那样显式地提供类的实例,还是像第二个示例那样隐式地提供类的实例,都无关紧要。