鱼C论坛

 找回密码
 立即注册
查看: 2244|回复: 5

[已解决]类和对象

[复制链接]
发表于 2021-4-14 16:09:00 | 显示全部楼层 |阅读模式
15鱼币
  1. class Stack:
  2.     def __init__(self, start=[]):    #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):         #obj是什么意思,为何不用x???
  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[-1]       #这句是什么意思???

  20.     def bottom(self):
  21.         if not self.stack:
  22.             print('警告:栈为空!')
  23.         else:
  24.             return self.stack[0]           #这句是什么意思???
复制代码


最佳答案
2021-4-14 16:09:01
huangdongdong 发表于 2021-4-15 17:28
当我删除  start = [],for x in statr:,self.push(x)   时也能实现功能,那这几行代码有什么作用呢?

这是让你初始化 Stack 对象的时候,可以选择初始化一个已经有数据的 栈对象 而已。
如果你删除这几行代码的话,你初始化的 Stack 对象就只能是一个空的 栈对象。

最佳答案

查看完整内容

这是让你初始化 Stack 对象的时候,可以选择初始化一个已经有数据的 栈对象 而已。 如果你删除这几行代码的话,你初始化的 Stack 对象就只能是一个空的 栈对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 16:09:01 | 显示全部楼层    本楼为最佳答案   
huangdongdong 发表于 2021-4-15 17:28
当我删除  start = [],for x in statr:,self.push(x)   时也能实现功能,那这几行代码有什么作用呢?

这是让你初始化 Stack 对象的时候,可以选择初始化一个已经有数据的 栈对象 而已。
如果你删除这几行代码的话,你初始化的 Stack 对象就只能是一个空的 栈对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 16:26:55 | 显示全部楼层
第一问: 在函数里面默认参数,一定不建议使用可变类型容器,很容易暴露内存,还有未知Bug。如果一定要用可变类型的容器做默认类型建议这样操作

  1. def a(start=None):
  2.     if start is None: start = []
复制代码


第二问:obj是什么意思,为何不用x???   这里只是函数的参数名字,可以使用任意合法的变量名字,但是在定义的时候,尽量做到见名字知道这个变量是干嘛的。

第三四问: 返回列表的末尾一个元素。返回列表的第一个元素。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-14 19:30:46 | 显示全部楼层
Stubborn 发表于 2021-4-14 16:26
第一问: 在函数里面默认参数,一定不建议使用可变类型容器,很容易暴露内存,还有未知Bug。如果一定要用可 ...

1:如果使用不可变的容器,那为啥不用元组呢?
2:第二问还是不懂,为何还要重新引入变量obj而不是继续使用x
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 21:20:58 | 显示全部楼层
首先你要理解这个类是用 python 来实现 stack(栈)的压栈和出栈,要是不明白的话可以去了解相关知识。
其次你的 python 基础有点差,不建议上来就学习类,如果是急需当我没说。
然后谈谈问题
1. 因为是为了实现栈以及相关操作,如果你知道栈这种数据结构,就明白为什么是用 list 了,至于为什么不用 tuple,因为 tuple 不能实现入栈出栈
2. 这个不是类的属性,是 类实例对象 的属性,通过下面代码就可以知道
  1. s = Stack()
  2. print(s.stack)
  3. print(Stack.stack)
复制代码

3. obj 没什么意思,只是一个形参名,你可以取任何其他的名字(只要不是关键字),学过 python 函数的话应该会知道这一点
4. 这一句是返回栈顶数据
5. 这一句是返回栈底数据
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-15 17:28:03 | 显示全部楼层
°蓝鲤歌蓝 发表于 2021-4-14 21:20
首先你要理解这个类是用 python 来实现 stack(栈)的压栈和出栈,要是不明白的话可以去了解相关知识。
其 ...

当我删除  start = [],for x in statr:,self.push(x)   时也能实现功能,那这几行代码有什么作用呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 19:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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