首页 > 解决方案 > 用“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当类位于单独的文件中时,它不起作用 ( )。

这是预期的吗?

标签: python

解决方案


with您遇到的问题与声明无关。您只是以错误的方式创建了一个类。如果你想在你的类中使用do_something()方法Session(),你可以从它继承: ,或者你可以作为变量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()

推荐阅读