You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kivy应用中跨文件获取类函数内定义的变量?

解决Kivy应用跨文件获取实例方法内变量的问题

我明白你现在的困境——想把start_1m里定义的interval变量传给另一个文件的crypto_data.main(),但直接调用实例方法的方式报错了。咱们来一步步拆解问题,找到最合适的解决方案。

首先得搞清楚你之前尝试失败的原因:MyFloat.start_1m()是实例方法,必须通过MyFloat的具体实例来调用(而不是直接用类调用),所以才会提示需要self参数。而且就算调用成功,interval是start_1m里的局部变量,外部默认是访问不到的,得换方式传递或者共享。

下面给你几个可行的方案,按推荐程度排序:

方案一:直接把interval作为参数传给crypto_data.main()(最推荐)

这是最简单、最符合代码规范的做法——既然你本来就在start_1m里调用crypto_data.main(),直接把interval作为参数传过去就行,完全不需要额外的全局变量或者属性。

修改你的start_1m方法:

def start_1m(self):
    interval = Client.KLINE_INTERVAL_1MINUTE
    # 把interval作为参数传给main()
    crypto_data.main(interval)
    return interval

然后在crypto_data.py里修改main函数,让它接收这个参数:

def main(interval):
    # 这里就可以直接使用interval变量了
    print(f"成功获取时间间隔: {interval}")
    # 你的其他业务逻辑代码...

这样一来,crypto_data.main()就能直接拿到你需要的interval,逻辑清晰,耦合度也低。

方案二:把interval设为MyFloat的实例属性

如果后续你的其他代码也需要用到这个interval变量,可以把它变成MyFloat实例的属性,这样其他文件只要能拿到这个实例,就能访问到变量。

修改start_1m方法:

def start_1m(self):
    # 将interval设为当前实例的属性
    self.interval = Client.KLINE_INTERVAL_1MINUTE
    crypto_data.main()
    return self.interval

接下来,你需要确保在crypto_data.py里能拿到MyFloat的实例。比如在main.py里你应该创建了MyFloat的实例:

# main.py里创建实例
my_float_widget = MyFloat()

然后在crypto_data.py里导入这个实例并访问属性:

from main import my_float_widget

def main():
    # 访问实例的interval属性
    if hasattr(my_float_widget, 'interval'):
        interval = my_float_widget.interval
        print(f"从实例获取时间间隔: {interval}")
    else:
        print("interval尚未被初始化")

⚠️ 注意:要确保start_1m已经执行过,否则my_float_widget.interval可能不存在,最好加个判断避免报错。

方案三:使用全局变量(不推荐,应急可用)

全局变量会让代码耦合度变高,后续维护起来麻烦,但如果只是临时测试可以用:

在main.py的类外部定义全局变量:

# 定义全局变量存储interval
global_interval = None

class MyFloat(Widget):
    # ...其他方法...
    def start_1m(self):
        global global_interval
        global_interval = Client.KLINE_INTERVAL_1MINUTE
        crypto_data.main()
        return global_interval

然后在crypto_data.py里导入这个全局变量:

from main import global_interval

def main():
    print(f"全局变量中的时间间隔: {global_interval}")

内容的提问来源于stack exchange,提问作者Jellyfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:24:06