[英]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.