![](/img/trans.png)
[英]self refers to the newly created object; in other class methods, it refers to the instance whose method was called.?
[英]Why class methods called on other methods, should be called with 'self'?
當我閱讀有關tkinter
本教程作為我在 Python 中使用 GUI 的第一步時,我意識到在__init__
函數內部調用了一個類函數。
我想了解,在__init__
函數中調用類函數時,出於什么原因必須聲明self.class_function()
?
我在下面的這個答案中發現了這個問題,它只是說它必須被稱為self.class_function
而不是class_function
,沒有提供任何關於為什么必須這樣做的概念或解釋:
class MyClass():
def __init__(self, filename):
self.filename = filename
self.stat1 = None
self.stat2 = None
self.stat3 = None
self.stat4 = None
self.stat5 = None
self.parse_file()
def parse_file(self):
#do some parsing
self.stat1 = result_from_parse1
self.stat2 = result_from_parse2
self.stat3 = result_from_parse3
self.stat4 = result_from_parse4
self.stat5 = result_from_parse5
我的理解是,您必須使用self.method_name
而不是method_name
調用方法的原因是,在self.method_name
,Python 將self
部分替換為方法的第一個參數。
您可以通過定義一個名為 Foo 的類來自己測試:
class Foo:
def __init__(self):
self.fun()
def fun(self):
print("fun")
您實際上可以通過執行以下操作來調用fun()
方法:
foo = Foo()
Foo.fun(foo)
這將與在類中執行self.fun()
相同。
請注意,您不能靜態訪問私有字段(例如Foo._private_method(foo)
。)
在
__init__
函數中調用類函數時,出於什么原因必須聲明 self.class_function()?
self.foo()
指的是類的實例方法,而不是靜態方法或來自其他模塊的其他方法......
通過這種方式,您可以在其他語言中執行類似於 this.foo() 的操作,換句話說: self.foo()
意味着調用該對象的 foo 方法!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.