[英]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
應該調用一個外部函數,它需要一個帶有兩個參數arg1
和arg2
的回調。 我想通過允許此回調使用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.