python 类函数 self_类方法中定义的python函数可以访问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内部给自己上色.

这就是我要实现的目标: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值