簡體   English   中英

在Python的類方法中調用實例方法

[英]Call instance method in class method in Python

我正在為公共庫設計一個類。

此類方法依次如下所示。

呼叫順序是“類方法”->“實例方法”->“實例方法”

我不知道為什么最后一個實例方法需要自我參數。

眾所周知,通常實例方法不需要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 A:

    def do_thing(self):
        pass

以下是等效的:

a = A()
a.do_thing()

A.do_thing(a)

換句話說,當我們調用實例的方法時,它與查找類對象的函數屬性並以該實例作為第一個參數調用它相同

現在,請注意,當您調用second ,會將cls傳遞給它。 那是類對象,而不是實例,這意味着您正在執行類似A.do_thing 因此,它知道你要調用哪個實例third ,你需要通過self

您唯一缺少的是沒有為類創建實例。

嘗試這個-

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 在您的用例中,這似乎沒有多大意義。 我希望這有幫助。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM