簡體   English   中英

在類方法中定義的python函數可以訪問self嗎?

[英]Can python functions defined inside class methods access self?

以此課程為例:

class MyClass(object):
    def __init__(self):
        self.attribute = 4

    def my_method(self):
        def my_fun(arg1, arg2):
            self.attribute = 7

        pass

應該允許my_fun訪問和更改self.attribute嗎?

我可以看到我的編輯器在my_fun中沒有self顏色。

這就是我想要實現的: my_method應該調用一個外部函數,它需要一個帶有兩個參數arg1arg2的回調。 我想通過允許此回調使用my_method聲明的變量來擴展功能,並且還使my_fun回調將一些調試信息寫入self.log 我不太確定這是否適合此類問題。

是。 self只是另一個變量。 它是python自動傳入對實例的引用作為第一個參數。 而已。

您的內部函數將能夠訪問self ,就好像它是訪問常規對象的常規函數​​一樣。

class MyClass(object):
    def __init__(self):
        self.attribute = 4

    def my_method(self):
        def my_fun():
            self.attribute = 7

        return my_fun

a = MyClass()
a.my_method()()
print(a.attribute)

輸出:

7

你解釋的設計很好; 它有一個問題是“我想通過允許這個回調來使用在my_method聲明的變量來擴展功能”。

雖然您可以訪問my_method定義的變量,但從設計角度來看,您希望以有意義的方式保存的變量更適合作為實例中的屬性。 您將能夠修改它們並自動“保存”,而如果您想保留在my_method定義的內容的結果,則必須在函數調用結束時找到另一個放置它們的位置。

暫無
暫無

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

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