在 class 中调用实例方法 Python 中的方法

Call instance method in class method in Python

我正在为公共图书馆设计一个class。

此 class 方法按如下顺序调用。

调用顺序为 'class method' -> 'instance method' -> 'instance method'

我不知道为什么最后一个实例方法需要 self 参数..

我们知道,通常情况下,实例方法不需要 self 方法。

我错过了什么?

class A:
    @classmethod
    def first(cls):
        print('cls method')
        cls.second(cls)

    def second(self):
        print('inst method 1')
        self.third(self)  # Question! Why this method need [self] parameter?

    def third(self):
        print('inst method 2')

A.first()      

这是因为你的调用方式 second

假设你有这样一个class:

class A:

    def do_thing(self):
        pass

以下是等价的:

a = A()
a.do_thing()

A.do_thing(a)

换句话说,当我们调用一个实例的方法时,相当于查找class对象的一个​​函数属性,然后以该实例为第一个调用它参数.

现在,请注意,当您调用 second 时,您将 cls 传递给它。那是 class 对象 而不是实例,这意味着您正在做类似 A.do_thing 的事情。因此,要让它知道你想在哪个实例上调用 third,你需要传入 self.

您唯一遗漏的是您没有为您的 class 创建实例。

试试这个-

class A:
    @classmethod
    def first(cls):
        print('cls method')
        cls.second(cls)

    def second(self):
        print('inst method 1')
        self.third(self)

    def third(self):
        print('inst method 2')

instance = A()
instance.first()   

这应该会为您提供所需的输出。至于为什么最后一个方法需要 self 作为参数,self 指的是你正在应用该方法的实例,因此你可以用它来改变它的属性。举个例子-

class Kid():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def change_age(self, age):
        self.age = age

tom = Kid('Tom', 13)
print(tom.age) #prints 13
tom.change_age(14)
print(tom.age) #prints 14

在这里,通过方法中的 self 参数,Python 会知道哪些实例的 属性 age 必须更改。 在您的用例中,它似乎没有多大意义。我希望这有帮助。 :)