self参数在功能上为何不同?

时间:2019-02-11 10:51:16

标签: python constructor

我发现这个示例非常令人困惑,因为他们使用了两个不同的参数,为什么?

class Person:
  def __init__(mysillyobject, name, age):
    mysillyobject.name = name
    mysillyobject.age = age

  def myfunc(abc):
    print("Hello my name is " + abc.name)

p1 = Person("John", 36)
p1.myfunc()

2 个答案:

答案 0 :(得分:5)

实例方法的第一个参数始终是对该实例的引用。

作为一种惯例,您通常将此参数命名为 self ,但是您可以随意给该参数指定其他有效名称,如您发布的代码所示。< / p>

答案 1 :(得分:1)

因此在python中,对于实例方法,第一个参数用于类的实例。如其他答案所述,这是 self 参数。但这只是按照惯例。从bananasmysillyobject,您都可以使用。

因此,在您的类中,将myfunc()方法定义为仅接受一个参数,这是我之前提到的实例。

因此,当您从p1(其中p1是Person类的对象)调用myfunc()时,您隐式地将p1传递给定义中提到的参数abc

def myfunc(abc): # p1 is passed for abc
    print("Hello my name is " + abc.name)

因此,访问并打印p1.name以提供正确的输出