为什么 class 方法必须在 python 中有 self 参数?
Why class method must have self parameter in python?
class Student:
def __init__(self, name):
self.name = name
我知道这段代码为什么用self了。这可以让不同的学生产生不同的属性
student1 = Student()
student2 = Student()
...
studentn = Student()
------------------------------------
student1.name
student2.name
...
studentn.name
但我不明白为什么下面这段代码需要 self 参数。
class Student:
def study():
print("I'm studying")
Student().study()
输出
Traceback (most recent call last):
File "C:/directory/test.py", line 12, in <module>
Student().study()
TypeError: study() takes 0 positional arguments but 1 was given
在 class 中创建函数时,您需要将 self
作为参数传递:
class Student:
def study(self):
print("I'm studying")
The first argument of every class method, including init, is always a
reference to the current instance of the class. By convention, this
argument is always named self. In the init method, self refers to the
newly created object; in other class methods, it refers to the
instance whose method was called
更多关于自变量的信息here
因为方法是通过调用它们的实例传递的,无论该方法是否需要它。
如果您不想使用参数,请将其设置为 "static method":
class Student:
@staticmethod
def study():
print("I'm studying")
这就是 python 在您执行 instance.method() 时的工作方式。方法接收实例作为第一个参数。注意:
Student().study()
等同于
student = Student()
student.study()
如果不加'self'
可以使用这段代码
class Student:
def study():
print("I'm studying")
Student.study()
输出:
我在学习
Self 不是关键字,它只是一个约定。此外,当您将 self 传递给 class 的方法时,您是通过使用 self 来引用该特定对象(因为 class 可以有多个对象并且都可以访问该方法),self 给您通过使用 self.att 在该方法中使用 class 的属性的选项。您可以将函数研究的输出作为 self.study="I am studying" 之类的属性,这将更适合您的目的。您可以阅读更多 and here .
Guido Van Rossum(python 的制作者)写了一篇博文,其中他告诉 why explicit self has to stay.
原因是因为每当在对象上调用方法时,Python 会自动将方法传递给调用它的对象。
class Student:
def __init__(self, name):
self.name = name
我知道这段代码为什么用self了。这可以让不同的学生产生不同的属性
student1 = Student()
student2 = Student()
...
studentn = Student()
------------------------------------
student1.name
student2.name
...
studentn.name
但我不明白为什么下面这段代码需要 self 参数。
class Student:
def study():
print("I'm studying")
Student().study()
输出
Traceback (most recent call last):
File "C:/directory/test.py", line 12, in <module>
Student().study()
TypeError: study() takes 0 positional arguments but 1 was given
在 class 中创建函数时,您需要将 self
作为参数传递:
class Student:
def study(self):
print("I'm studying")
The first argument of every class method, including init, is always a reference to the current instance of the class. By convention, this argument is always named self. In the init method, self refers to the newly created object; in other class methods, it refers to the instance whose method was called
更多关于自变量的信息here
因为方法是通过调用它们的实例传递的,无论该方法是否需要它。
如果您不想使用参数,请将其设置为 "static method":
class Student:
@staticmethod
def study():
print("I'm studying")
这就是 python 在您执行 instance.method() 时的工作方式。方法接收实例作为第一个参数。注意:
Student().study()
等同于
student = Student()
student.study()
如果不加'self'
可以使用这段代码class Student:
def study():
print("I'm studying")
Student.study()
输出: 我在学习
Self 不是关键字,它只是一个约定。此外,当您将 self 传递给 class 的方法时,您是通过使用 self 来引用该特定对象(因为 class 可以有多个对象并且都可以访问该方法),self 给您通过使用 self.att 在该方法中使用 class 的属性的选项。您可以将函数研究的输出作为 self.study="I am studying" 之类的属性,这将更适合您的目的。您可以阅读更多
Guido Van Rossum(python 的制作者)写了一篇博文,其中他告诉 why explicit self has to stay.
原因是因为每当在对象上调用方法时,Python 会自动将方法传递给调用它的对象。