python自定义类导入问题
大家讲道理
大家讲道理 2017-04-17 17:15:49
[Python讨论组]
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
天蓬老师

login_session 处于 starLogin 的代码块内,LoginWork 被导入到 b 中虽会创建方法属性 startLogin,但并不会执行其内的代码块,因此 global login_session 是不会被执行的。另外,即便实例化 LoginWork 并执行 startLogin 也是无济于事的,因为 startLogin 的执行是在自己的作用域内,执行完毕后便会释放作用域,而 global 语句并不能跨文件!此外,global 语句并非创建一个全局变量,而只是声明其后的变量来自全局变量。
因此,如果 login_session 和 class LoginWork 在同一作用域,可以这么改:

class LoginWork:
    login_session = login_session  #将全局变量变为类属性
    def __init__(self):
        pass
    def startLogin(self):
        pass
from a import LoginWork
class SpiderWork:
    def __init__(self):
        pass
    def spiderNow(self):
        LoginWork.login_session.post(...)  #注意这里的调用
        pass        

或者,直接修改 b 文件,将 import 语句改为:

import a

class SpiderWork:
    def __init__(self):
        pass
    def spiderNow(self):
        login_session.post(...) 
        pass        
ringa_lee

login_session是定义在startLogin方法里的,导入的时候不会执行这个方法,所以也不会创建这个变量。只要执行一下startLogin就可以了:

lw = LoginWork()
lw.startLogin() # 现在能用login_session了
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号