Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试创建和使用类;名称';是空的';没有定义_Python_Python 3.x - Fatal编程技术网

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
只接受一个参数,
堆栈
类的实例。无论您是像第一个示例那样显式地提供类的实例,还是像第二个示例那样隐式地提供类的实例,都无关紧要。