以此类为例:
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
吗?
我可以看到我的编辑器没有在self
内部给my_fun
上色。
这是我要实现的目标:my_method
应该调用一个需要回调的外部函数,该回调带有两个参数arg1
和arg2
。我想通过允许此回调使用在my_method
中声明的变量来扩展功能,并且还使my_fun
回调向self.log
写入一些调试信息。我不太确定这是否适合解决此类问题。
答案 0 :(得分:3)
是的。 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
中定义的结果,则必须在函数调用结束时找到另一个放置它们的位置。