LIFO 第39讲动动手课后习题问题
本帖最后由 LYFhhh 于 2022-7-3 10:18 编辑不明白为什么画红线的语句,
这个时候push不是还没有定义出来吗?
class Stack:
def __init__(self, start=[]):
self.stack = []
for x in start:
self.push(x)
def isEmpty(self):
return not self.stack
def push(self, obj):
self.stack.append(obj)
def pop(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack.pop()
def top(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack[-1]
def bottom(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack
你这里代码的整个过程就属于定义,即定义了一个 Stack 栈类
Twilight6 发表于 2022-7-3 10:31
你这里代码的整个过程就属于定义,即定义了一个 Stack 栈类
哦哦好的,那这个push会不会和后面的
def push(self, obj):
self.stack.append(obj)
重复定义了呢? LYFhhh 发表于 2022-7-3 14:51
哦哦好的,那这个push会不会和后面的
def push(self, obj):
class 定义整个类, 这里 push 只是这个类中的一个方法,类所拥有的功能 def 这些方法,你这里 push 只定义了一次,没有什么重复定义之说
Twilight6 发表于 2022-7-3 14:59
class 定义整个类, 这里 push 只是这个类中的一个方法,类所拥有的功能 def 这些方法,你这里 push...
那划红线的这个语句定义什么呢?或者说它算是一个定义语句吗?
我可能是没懂划红线这个语句的意思 LYFhhh 发表于 2022-7-3 15:09
那划红线的这个语句定义什么呢?或者说它算是一个定义语句吗?
我可能是没懂划红线这个语句的意思
红字不是定义的过程,红字是调用,你这里整个代码属于定义
定义了 Stack 类,类中有 isEmpty、push、pop 等方法 :
class Stack:
def __init__(self, start=[]):
self.stack = []
for x in start:
self.push(x)
def isEmpty(self):
return not self.stack
def push(self, obj):
self.stack.append(obj)
def pop(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack.pop()
def top(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack[-1]
def bottom(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack
红字部分在 __init__ 构造函数里,对 Stack 类进行实例化时候才会自动调用构造方法,这里 self 就是指的实例对象本身
Twilight6 发表于 2022-7-3 15:12
红字不是定义的过程,红字是调用,你这里整个代码属于定义
定义了 Stack 类,类中有 isEmpty、p ...
嗯嗯好的!
那红字部分的意思是不是说,对象实例化后,把start里面的每一个元素x都加到实例化对象里面去呢?
如果是的话,感觉跟后面
def push(self, obj):
self.stack.append(obj)
这个方法重复了;
如果不是,就感觉这个红字写在这里没有什么意义~
可能问题有点多,见谅O(∩_∩)O哈哈~ LYFhhh 发表于 2022-7-3 15:19
嗯嗯好的!
那红字部分的意思是不是说,对象实例化后,把start里面的每一个元素x都加到实例化对象里面去 ...
不重复,你这里是没理解 Stack 的含义, __init__ 里面调用的 push 就是因为类中定义了push ,即 def push 才得以调用,否则你就无法调用 push 方法
而 __init__ 之所以要再次调用 push ,是因为构造函数本身功能之一就是初始化的作用
这里将初始化传入的列表直接依次压栈,到栈数据结构中去,也是比较完整的模拟栈这个结构的运行过程
否则 __init__ 中实际上直接将 self.stack = start 都没问题,就是为了完整再现栈的数据结构
Twilight6 发表于 2022-7-3 15:24
不重复,你这里是没理解 Stack 的含义, __init__ 里面调用的 push 就是因为类中定义了push ,即 d ...
哇哇懂了!醍醐灌顶!
谢谢大佬~ LYFhhh 发表于 2022-7-3 16:20
哇哇懂了!醍醐灌顶!
谢谢大佬~
{:9_227:} 客气啦~
页:
[1]