以此类为例:
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内部给自己上色.
这就是我要实现的目标:my_method应该调用一个需要使用两个参数arg1和arg2的回调的外部函数.我想通过允许此回调使用在my_method内声明的变量来扩展功能,并使my_fun回调将一些调试信息写入self.log.我不太确定这是否是解决此类问题的正确设计.
解决方法:
是.自我只是另一个变量.它是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中定义的结果,则必须在函数调用结束时找到另一个放置它们的位置.
标签:python