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前缀,什么时候不用?

望采纳


在 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 是一个局部变量,不属于这个对象。

这是定义在类下面的函数啊,实例每次调用类下面的函数默认会隐式把自己作为参数传进去,所以加一个self来表示这个变量是自己,self换成其他变量名也行,用self是习惯。