用"with"语句定义的 Python 变量 - 范围是什么?


class S:
def __init__(self):
sess.do_something()

主要:

if __name__ == '__main__':
with Session() as sess:
s1 = S()
s1.do_something()

只要class S在同一个文件中,上面的代码就可以工作。当类在单独的文件中时,它不起作用(NameError: name 'sess' is not defined)。

这是意料之中的吗?

您遇到的问题与with语句无关。 您只是以错误的方式创建了一个类。 如果要在类中使用Session()do_something()方法,可以从中继承:class S(Session): ...,也可以将sess作为变量传递:

class S:
def __init__(self, session):
self.session = session
def do_something(self)
return self.session.do_something()

if __name__ == '__main__':
with Session() as sess:
s1 = S(sess)
s1.do_something()

最新更新