当前位置: 代码迷 >> python >> Python 类中的 self
  详细解决方案

Python 类中的 self

热度:111   发布时间:2023-07-16 11:13:45.0

我知道 Python 方法中的第一个参数将是此类的一个实例。 所以我们需要在方法中使用“self”作为第一个参数。 但是我们是否也应该在以“self.”开头的方法中指定属性(变量)?

即使我没有在他的属性中指定 self ,我的方法也能工作:

class Test:
  def y(self, x):
    c = x + 3
    print(c)

t = Test()
t.y(2)
5

class Test:
  def y(self, x):
    self.c = x + 3
    print(self.c)

t = Test()
t.y(2)
5

对于我需要在“self.a”之类的方法中指定一个属性,而不仅仅是“a”?

在哪些情况下,第一个示例将不起作用,但第二个示例将起作用? 想看看显示出他们两个之间真正差异的情况,因为现在从我的角度来看,他们的行为是一样的。

您在类方法中执行 self.attribute_name 的原因是对该实例属性执行计算,而不是使用随机变量。例如

class Car:
  def __init__(self,size):
      self.size = size

  def can_accomodate(self,number_of_people):
      return self.size> number_of_people

  def change_size(self,new_size):
      self.size=new_size

   #works but bad practice      

   def can_accomodate_v2(self,size,number_of_people):
       return size> number_of_people

 c = Car(5)
 print(c.can_accomodate(2))
 print(c.can_accomodate_v2(4,2))

在上面的示例中,您可以看到 can_accomodate 使用的 self.size 而 can_accomodate_v2 传递了大小变量,这是不好的做法。两者都可以使用,但 v2 是一种不好的做法,不应使用。您可以将参数传递给类方法而不是与实例/类相关,例如 can_accomodate 功能中的“number_of_people”。 希望这可以帮助。