加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python关闭oop

发布时间:2020-12-20 11:20:57 所属栏目:Python 来源:网络整理
导读:我试图用 python闭包做一些有点奇怪的事(至少对我来说).说我有2个这样的课程: #!/usr/bin/pythonimport typesdef method_a(self): print "ma %d" % self.valclass A(object): def __init__(self): self.val = 5 pass def foo(self,a): def closure(self): p
我试图用 python闭包做一些有点奇怪的事(至少对我来说).说我有2个这样的课程:

#!/usr/bin/python
import types

def method_a(self):
    print "ma %d" % self.val

class A(object):
    def __init__(self):
        self.val = 5
        pass

    def foo(self,a):
        def closure(self):
            print "closure %d,%d" % (self.val,a)
        return closure

class B(object):
    def __init__(self):
        self.val = 10
        pass

    def foo(self):
        print "B::foo %d"  % self.val


a = A()
b = B()
b.undo = types.MethodType(a.foo(1),b)

b.undo()

因此,对象a的方法返回一个由对象b使用的闭包,闭包函数将绑定到对象b,因为上面的代码将导致:

closure 10,1

我的问题是:无论如何都要允许closure()方法访问属性,对象的方法是什么?

谢谢,

解决方法

给内在的自己另一个名字:

def foo(self,a):
    def closuer(b):
        print "closure %d,a)
    return closuer

而且,您可能希望使用functools.partial,而不是使用types.MethodType

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读