有没有办法在不同的类中设置一个等于变量的值,并让它保持第一次运行的值而不必每次都运行?

Posted

技术标签:

【中文标题】有没有办法在不同的类中设置一个等于变量的值,并让它保持第一次运行的值而不必每次都运行?【英文标题】:Is there a way to set a value equal to a variable in a different class and have it keep the value from the first run and not have to run everytime? 【发布时间】:2020-12-18 22:24:53 【问题描述】:

我有两个课程,一个是使用 selenium 来抓取 25 个不同的页面,这需要很长时间。我有另一个类需要 1 秒才能运行,但它从另一个类调用一个变量。我希望 self.numbers 等于 data.scores 并以某种方式保持设置的值,以便测试只需要一秒钟。永远需要的类是 AllData() ,我希望 self.numbers 保持不变,而不必复制和粘贴打印的值。

from collections import defaultdict
from data import *

class Test:
    def __init__(self,):
        data = AllData()
        self.numbers = data.scores

【问题讨论】:

“保持价值”和“坚持”是什么意思? 就持久化数据而言:您可以将其写入文本文件、写入数据库、腌制、将其硬编码到您在脚本中导入的模块中,等等。没有这个问题中关于您尝试过的内容的足够详细信息让我们知道如何最好地提供帮助。尝试扩展您的问题以包含minimal reproducible example data.scores的类型是什么? data.scores 是一个字典。我希望它设置 data = data.scores 然后让该值在运行后保持不变,一旦我希望能够删除对 AllData 类的调用。即:data = AllData.scores = 'num': [1,2,3,4] 而不必再次运行该文件 Well then 【参考方案1】:

我不确定我是否完全理解。使用类变量会解决您的问题吗?这意味着你可以调用当前值

class a:
    var = 'init':'has', 'not':'run'
    
    def __new__(cls):
        cls.var = 'new has':'run'
        return super(a, cls).__new__(cls) 
    
    def __init__(self):
        self.var['so has'] = 'init'

class b:
    def __init__(self, obj):
        self.sav = obj.var

使用示例:

>>> b(a).var
'init':'has', 'not':'run'

>>> b(a()).var
'new has': 'run', 'so has': 'init'

【讨论】:

我认为这不适用于我正在尝试的内容。每次您运行 B 类时,它也会运行 A 类。我试图在它运行后存储该值。我想重新运行 B 类,而不是让它再次调用 A 类,而是存储我上次运行它时的值。 问题是我从不直接在 AllData 类中设置变量。每次计算值大约需要 5 分钟。 这不是我将包含在生产中的东西,但它会显着加快调试过程。我可以复制和粘贴它,但我只是假设有一种方法可以用代码实际做到这一点。

以上是关于有没有办法在不同的类中设置一个等于变量的值,并让它保持第一次运行的值而不必每次都运行?的主要内容,如果未能解决你的问题,请参考以下文章

在 django 模板中设置和重置变量的值

如何使用 HUE 在 Impala 查询中设置变量?

有没有办法在 MySQL 的一个 SELECT 查询中设置多个变量?

如何使用 QProgressBar

有没有办法在Visual Studio Code中设置环境变量?

在javascript中设置一个等于变量的HTML字符串[重复]