鱼C论坛

 找回密码
 立即注册
查看: 1427|回复: 4

[已解决]类的问题,求助

[复制链接]
发表于 2020-2-14 00:01:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. class Stack:
  2.     def __init__(self,start=[]):
  3.         self.stack = []
  4.         for x in start:
  5.             self.push(x)

  6.     def isempty(self):
  7.         return not self.stack
  8.     def push(self,obj):
  9.         self.stack.append(obj)
  10.     def pop(self):
  11.         if not self.stack:
  12.             print('警告,栈为空!')
  13.         else:
  14.             return self.stack.pop()
  15.     def top(self):
  16.         if not self.stack:
  17.             print('警告,栈为空!')
  18.         else:
  19.             return self.stack[0]
  20.     def bottom(self):
  21.         if not self.stack:
  22.             print('警告,栈为空!')
  23.         else:
  24.             return self.stack[-1]


  25. st = Stack()

  26. st.push('C')
  27. st.push('h')
  28. st.push('s')
  29. st.push('i')
  30. st.push('f')
  31. print(st.bottom())

  32. print(st.stack[::-1])
复制代码



                               
登录/注册后可看大图


两处  第一处为什么用start 而不用self.stack呢?  

第二处 为什么用obj  而不用 self.obj呢
谢谢
最佳答案
2020-2-14 00:45:40
不知道你是不是还没完全理解self参数的含义,self参数就是实例化对象,而你要往栈里面传东西,实例对象的栈里的stack原本就是空的了,怎么可能用self.stack呢?比如说
  1. a = Stack([2,3,5]) #start = [2,3,5],但a.stack(即self.stack)在初始化前为空
复制代码

而用push的方法,则可将start中元素推入a.stack
同理,你的
  1. self.stack.append(obj)
复制代码
,这个obj也是你自己输进去或者start传进去的,在a.stack中还不存在这个obj,不能用self.obj
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-14 00:15:09 From FishC Mobile | 显示全部楼层
这都是外面传进去的,和self没关啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 00:22:48 | 显示全部楼层
本帖最后由 yexing 于 2020-2-14 00:24 编辑

这两个参数都是调用方法时从外面传进来的,在使用该方法的时候直接调用即可,不用self。
self是调用类属性或类方法用的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 00:45:40 | 显示全部楼层    本楼为最佳答案   
不知道你是不是还没完全理解self参数的含义,self参数就是实例化对象,而你要往栈里面传东西,实例对象的栈里的stack原本就是空的了,怎么可能用self.stack呢?比如说
  1. a = Stack([2,3,5]) #start = [2,3,5],但a.stack(即self.stack)在初始化前为空
复制代码

而用push的方法,则可将start中元素推入a.stack
同理,你的
  1. self.stack.append(obj)
复制代码
,这个obj也是你自己输进去或者start传进去的,在a.stack中还不存在这个obj,不能用self.obj
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-14 02:42:29 | 显示全部楼层
很有道理。我慢慢品品,谢谢啊。

我这36岁了才开始学编程。刚学了一周。 还没入门呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-11 06:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表