相关疑难解决方法(0)

__enter__`方法的返回值在python中应始终为`self`吗?

__enter__方法的返回值不应该self始终是。

Python文档说:

object.__enter__(self) 输入与此对象相关的运行时上下文。with语句会将此方法的返回值绑定到该语句的as子句中指定的目标(如果有)。

这样做,为了做任何实际的事情,不self应该总是从__enter__类的方法中返回它,否则,就不能从上下文中调用其他类方法。

例如,在下面的代码中,s.main()可以正常工作,但b1.main()会出错。

class a(object):
    def __init__(self):
        pass

    def __enter__(self):
        return self

    def __exit__(self ,type, value, traceback):
        return self

    def main(self):
        print " in a::main self %d " , id(self)


class b(object):
    def __init__(self):
        pass

    def __enter__(self):
        return "something else"

    def __exit__(self ,type, value, traceback):
        pass

    def main(self):
        print "in b::main !! self id " , id(self)

with a() as s:
    s.main()

with b() as b1:
    b1.main()

s …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
1102
查看次数

标签 统计

python ×1