gpt4 book ai didi

python - 防止 Python 在加载脚本时加载脚本的某些部分

转载 作者:行者123 更新时间:2023-12-01 04:11:23 26 4
gpt4 key购买 nike

背景:我正在尝试减少测试完成运行所需的时间。

我最近了解到,当 Python 解释器加载文件时,它会执行在其中找到的所有代码。 (引用:https://stackoverflow.com/questions/419163/what-does-if-name-main-do)

有没有办法阻止解释器执行文件的某些部分?原因是,我有一个脚本可以创建一个 session 并将其分配给一个类属性。该脚本看起来像这样。

 def login():
// Gets auth session from an api. This takes some seconds.
return // session

class Something(object):
class_session = login()

现在我尝试模拟这个登录过程,但是当我运行单元测试时(顺便说一句,我使用 Nose ),我认为Python读取,立即执行这个脚本,然后尝试在模拟之前创建一个 session 方法。这需要几秒钟,我的测试随后需要更长的时间才能完成运行(如果这不是流程,请纠正我)。

  • 有没有办法阻止 Python 在读取脚本时执行该脚本(无需将代码包装在函数中)?
  • 如果是这样,处理这个问题最 Pythonic 的方法是什么?
  • 此外,默认情况下,编写良好的测试需要多长时间才能运行。我认为这应该少于1秒(不知道我从哪里得到这个印象)。

请分享一些见解,谢谢。

最佳答案

您需要以这样的方式编写代码,使其在简单声明事物时不会做太多事情。仅当您显式调用函数或实例化类时,您的代码才应执行“实际工作”。

class Something(object):
class_session = login()

这会创建一个类属性class_session,这显然必须在定义类时发生,否则它就不是类属性。这时候需要执行login()

要仅在实例化新对象时正确执行此操作,请将此代码移至构造函数中并使其成为实例属性:

class Something(object):
def __init__(self):
self.class_session = login()

如果不知道这段代码应该做什么,就不可能判断将某个东西作为类属性还是实例属性更有意义。但是,您确实应该延迟所有“实际工作”,直到显式调用函数为止;导入模块时触发登录是疯狂的。

关于python - 防止 Python 在加载脚本时加载脚本的某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com