You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义Stack类如何打印私有__data列表?

如何打印Stack类的私有__data列表并显示[1,2]?

嘿,我来帮你搞定这个问题!你写的Stack类里,__data是用双下划线开头的属性,这在Python里属于名称修饰的私有属性,目的是限制外部直接访问类的内部数据,所以你直接尝试打印stack.__data肯定会报错。下面给你两种实用的解决方案:

方案一:给Stack类添加一个公开方法(推荐)

这是最符合面向对象封装原则的做法,我们在类里新增一个方法,专门用来返回或打印内部的__data列表:

class Stack:
    def __init__(self):
        self.__data = []
    def empty(self):
        return len(self.__data) == 0
    def size(self):
        return len(self.__data)
    def push(self, x):
        self.__data.append(x)
    def pop(self):
        return self.__data.pop()
    # 新增方法:返回内部数据的副本(避免外部直接修改原列表)
    def get_stack_data(self):
        return self.__data.copy()
    # 或者直接新增打印方法
    def print_stack(self):
        print(self.__data)

# 创建实例并测试
stack = Stack()
stack.push(1)
stack.push(2)

# 用新增的方法获取并打印
print(stack.get_stack_data())  # 输出 [1,2]
# 或者直接调用打印方法
stack.print_stack()  # 输出 [1,2]

方案二:通过名称修饰后的属性访问(不推荐)

Python的私有属性其实只是做了名称变换,双下划线开头的属性会被自动改成_类名__属性名的格式,所以你可以通过这个修改后的名称来访问,但这种做法会破坏类的封装性,不建议在实际项目中使用:

# 沿用你原来的Stack类代码
class Stack:
    def __init__(self):
        self.__data = []
    def empty(self):
        return len(self.__data) == 0
    def size(self):
        return len(self.__data)
    def push(self, x):
        self.__data.append(x)
    def pop(self):
        return self.__data.pop()

stack = Stack()
stack.push(1)
stack.push(2)

# 访问名称修饰后的属性
print(stack._Stack__data)  # 输出 [1,2]

内容的提问来源于stack exchange,提问作者Magda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:16:52