为什么类方法在python中必须有自参数?

为什么类方法在python中必须有自参数?,python,methods,self,Python,Methods,Self,我知道为什么在这个代码中使用self。这可以让不同的学生获得不同的属性 class Student: def __init__(self, name): self.name = name 但是我不明白为什么下面的代码需要self参数 student1 = Student() student2 = Student() ... studentn = Student() ------------------------------------ student1.name s

我知道为什么在这个代码中使用self。这可以让不同的学生获得不同的属性

class Student:
    def __init__(self, name):
        self.name = name
但是我不明白为什么下面的代码需要self参数

student1 = Student()
student2 = Student()
...
studentn = Student()
------------------------------------

student1.name
student2.name
...
studentn.name
输出

class Student:
    def study():
        print("I'm studying")


Student().study()
回溯(最近一次呼叫最后一次):
文件“C:/directory/test.py”,第12行,在
学生学习
TypeError:study()接受0个位置参数,但给出了1个

在类中创建函数时,需要将
self
作为参数传递:

班级学生:
def研究(自我):
打印(“我正在学习”)
每个类方法(包括init)的第一个参数始终是 对类的当前实例的引用。按照惯例,这个 参数始终命名为self。在init方法中,self指 新创建的对象;在其他类方法中,它引用 调用其方法的实例


更多关于自变量的信息

,因为方法会被传递给调用它们的实例,而不管方法是否需要它

如果您不想拥有该参数,请将其设置为“静态方法”:


这就是python在执行instance.method()时的工作方式。方法将实例作为第一个参数接收。请注意:
Student().study()
等同于

class Student:
    @staticmethod
    def study():
        print("I'm studying")

如果不添加“self”,您可以使用此代码。

student = Student()
student.study()
输出:
我在学习,自我不是一个关键词,它只是一个惯例。此外,当您将self传递给使用self引用该特定对象的类的方法时(因为一个类可以有多个对象,并且所有对象都可以访问该方法),self允许您使用self.att在该方法中使用该类的属性。您可以将函数研究的输出设置为属性,如self.study=“I am study”,这将更适合您的目的。您可以阅读更多和。

因为当您调用实例方法时,接收对象作为参数传递给该方法。如果该方法无法接受该对象,则会出现错误。如果您不希望函数接受一个
self
参数,则不必将其作为实例方法。顺便说一句,您声称理解的第一个代码甚至无效。它会给你同样的错误,只是不同的数字<代码>\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这给了我一些线索
student = Student()
student.study()
class Student:
    def study():
        print("I'm studying")


Student.study()