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

如何在Python中导入并使用另一个程序类中定义的变量?解决跨文件访问类内用户输入变量失败问题

解决Python跨文件访问类内变量的问题

我来帮你搞定这个跨文件调用类变量的问题,先看看你的代码里的几个关键错误,然后一步步修正:

首先修正try3.py的问题

你的vdoterm类的__init__方法没有接收url和path参数,导致创建实例t的时候传参直接报错,自然没法正确初始化类内的变量。另外,类的初始化方法必须把传入的参数赋值给self属性,这样外部才能通过实例访问到这些变量。

修正后的try3.py代码:

from pytube import YouTube

class vdoterm:
    # 这里要把url和path作为参数传入__init__方法
    def __init__(self, url, path):
        self.url = url  # 把传入的url赋值给实例属性
        self.path = path  # 把传入的path赋值给实例属性

# 获取用户输入
url = input("Enter the video URL: ")
path = input("Enter the path: ")
# 现在创建实例时传参数就不会报错了
t = vdoterm(url, path)

再修正try2.py的问题

  1. down类的video方法是实例方法,第一个参数必须是self,否则调用时会把实例本身当作第一个参数传给url,导致参数不匹配。
  2. 调用t2.video()的时候没有传参数,但方法定义需要url和path,你需要从导入的t对象中获取这两个值传进去。
  3. 多次创建YouTube(url)实例有点浪费,建议复用同一个对象,提升效率。

修正后的try2.py代码:

from pytube import YouTube
from try3 import t  # 导入try3中已经创建好的t实例

class down:
    # 实例方法必须带self参数
    def video(self, url, path):
        y = YouTube(url)  # 只创建一次YouTube对象
        video1 = y.streams.first().download(path)
        # 复用y对象的属性,不用重复调用YouTube(url)
        print(f"title:{y.title}, views:{y.views}, Length:{y.length}")
        print("Successfully done")
        return video1

t2 = down()
# 从t实例中取出url和path参数传入video方法
t2.video(t.url, t.path)

为什么之前的尝试没效果?

  • 最初的vdoterm类初始化方法有问题,导致t实例根本没正确创建,自然访问不到url和path属性。
  • video方法缺少self参数,不符合Python实例方法的规范,调用时会触发参数错误。
  • 调用video时没传必要的参数,即使导入了t,也没有把t的属性传递过去。

额外说明

当你在try2.py中from try3 import t时,Python会先执行try3.py中的所有顶级代码(包括用户输入的部分),所以运行try2.py的时候,会先弹出输入URL和路径的提示,之后才会执行下载逻辑,这是正常的模块导入行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:09:10