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
相关产品推荐
相关产品推荐

