簡體   English   中英

為什么在其他方法上調用的類方法應該用“self”調用?

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

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