qq_35174462 2022-12-11 17:37 采纳率: 83.3%
浏览 10
已结题

Python self前缀

######Python self前缀

Leetcode 剑指offer 30.
class MinStack:
def __init__(self):
    """
    initialize your data structure here.
    """
 self.stack=[]
 self.stack_min=[]

def push(self, x: int) -> None:
  self.stack.append(x)
  if self.stack_min==[]
   self.stack_min.append(x)
  else:
      val=min(x, self.stack_min[-1])
      self.stack_min.append(val)
def pop(self) -> None:
   self.stack.pop(-1)
   self.stack_min.pop(-1)

def top(self) -> int:
    return self.stack[-1]

def min(self) -> int:
    return self.stack_min[-1]
不写self前缀会报错
什么时候改用self前缀,什么时候不用?
  • 写回答

2条回答 默认 最新

  • ShowMeAI 2022-12-11 17:54
    关注

    望采纳


    在 Python 中,如果要访问一个对象的属性或者方法,通常需要在属性或方法名前面加上 self 前缀。这个 self 前缀的作用是表示当前对象本身,也就是说,如果在一个对象的方法中,你要访问这个对象本身的属性或方法,那么就需要使用 self 前缀。


    比如,你定义了一个类 MyClass,里面有一个属性 my_attribute 和一个方法 my_method。如果在 my_method 中要访问 my_attribute,那么就需要使用 self.my_attribute 来访问。


    但是,如果你在一个方法中要访问的属性或方法不属于这个对象本身,而是来自于这个类的父类或者其它的类,那么就不需要使用 self 前缀。比如,如果你在 my_method 中要访问 str 类中的一个方法,那么就不需要使用 self 前缀,可以直接使用这个方法名来访问。


    上面提到的代码中,有两处地方不需要使用 self 前缀,一处是在第 8 行的 if 语句中,应该把 self.stack_min 改成 stack_min,因为 stack_min 不属于当前对象,而是属于这个类的一个局部变量。另一处是在第 14 行的 return 语句中,应该把 self.stack_min 改成 stack_min,因为 stack_min 是一个局部变量,不属于这个对象。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月11日

悬赏问题

  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果