一个关于惰性赋值的 python 问题
这里我把实际业务抽象了一下
我试图创建一个类,它有以下方法:
class A:
def __init__(self, num):
self.num = num
def add_1(self):
return self.num + 1
def add_2(self):
return self.num + 2
def add_3(self):
return self.num + 3
...
这里的需求清楚的不能再明显了,我可以不断的编写add_n
函数,但是一般人都不会止步于此,总想着简化一下,是不是可以用动态的方法来生成这些类函数呢?
于是我试图写下了以下方法:
import types
class A:
def __init__(self,num):
self.num = num
self.add_prop(10) # 这里我们安排设置10个这样的函数
def add_prop(self, n):
for i in range(n):
fun_name = 'add_' + str(n) # 生产函数名
def add_fun(self):
return self.num + i
setattr(self, fun_name, types.MethodType(add_fun, self)) # 设置函数
似乎从逻辑上说,上面代码能实现我的想法,它确实让class A
拥有了10个add_n
的属性,但是实际上这些方法其实是同一个的,不能按需返回预定的值。比如add_1
,我们期待它返回self.num + 1
,但是事实上它返回的是self.num + 10
,也就是for i in range(10)
中的循环尾数10
。
- 那么请问我应该怎么写才能避免这种情况呢,或者有没有其它比较好的实现方法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
改成
这是一个闭包的问题,这样解决