鱼C论坛

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

[已解决]类和对象

[复制链接]
发表于 2021-4-14 16:09:00 | 显示全部楼层 |阅读模式
15鱼币
class Stack:
    def __init__(self, start=[]):    #start为什么要是列表???
        self.stack = []                     #定义类的属性???
        for x in start:                       
            self.push(x)

    def isEmpty(self):
        return not self.stack、
    def push(self, obj):         #obj是什么意思,为何不用x???
        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[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 对象就只能是一个空的 栈对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这是让你初始化 Stack 对象的时候,可以选择初始化一个已经有数据的 栈对象 而已。
如果你删除这几行代码的话,你初始化的 Stack 对象就只能是一个空的 栈对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

第三四问: 返回列表的末尾一个元素。返回列表的第一个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

发表于 2021-4-14 21:20:58 | 显示全部楼层
首先你要理解这个类是用 python 来实现 stack(栈)的压栈和出栈,要是不明白的话可以去了解相关知识。
其次你的 python 基础有点差,不建议上来就学习类,如果是急需当我没说。
然后谈谈问题
1. 因为是为了实现栈以及相关操作,如果你知道栈这种数据结构,就明白为什么是用 list 了,至于为什么不用 tuple,因为 tuple 不能实现入栈出栈
2. 这个不是类的属性,是 类实例对象 的属性,通过下面代码就可以知道
s = Stack()
print(s.stack)
print(Stack.stack)
3. obj 没什么意思,只是一个形参名,你可以取任何其他的名字(只要不是关键字),学过 python 函数的话应该会知道这一点
4. 这一句是返回栈顶数据
5. 这一句是返回栈底数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

当我删除  start = [],for x in statr:,self.push(x)   时也能实现功能,那这几行代码有什么作用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 02:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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