我试图将一个 python 文件中定义的变量导入另一个文件中,两者都在同一目录中。 以下是示例:
# filename1
class Proton:
def test(self):
self.a_tags = soup_file.find_all('a')
self.cases = [str(each.get_text()) for each in self.a_tags]
self.links = [(link.get('href')) for link in soup_file.find_all('a')]
# I want to import the above values in the below file
# filename2
import sqlite3
class Database:
def __init__(self):
self.create_connection()
self.create_table()
def create_connection(self):
self.conn = sqlite3.connect('gopel.db')
self.curr = self.conn.cursor()
def create_table(self):
self.curr.execute('''CREATE TABLE testfall(cases TEXT, links TEXT)''')
def testfall_db(self):
self.curr.execute('''INSERT INTO testfall VALUES(?,?)''',(self.cases,self.links,))
self.curr.execute('''SELECT cases FROM testfall WHERE cases=?''', [self.cases])
self.conn.commit()
我在 filename2 中使用了 from filename1 import *
但这些值仍然未定义并且在数据库中它存储的是 NULL 值。关于如何将这些导入到 filename2 文件的任何建议。
PS:filename1 和 filename2 是两个不同的文件
答案 0 :(得分:1)
好问题!
这里的主要问题是您在 Proton 类中定义的变量是 Proton 对象的“实例变量”(又名字段或数据成员)。另一种思考方式是它们“属于”某个 Proton 实例。
如果不先创建那个对象,就想,它们不存在!
在下面的例子中,我们首先初始化一个 Proton 对象,然后访问它的一个实例变量。
my_proton = Proton() # Creating a Proton object
my_proton.a_tags # Accessing the a_tags attribute
下面,我编辑了您的代码,以便您可以访问 Proton 对象的实例变量。在下面的示例中,我刚刚创建了测试标签来展示如何访问它们。
# filename1: "proton.py"
class Proton:
def __init__(self):
self.a_tags = []
self.cases = []
self.links = []
def test(self):
self.a_tags = ['test a_tags']
self.cases = ['test cases']
self.links = ['test links']
# filename2: "database.py"
import sqlite3
from proton import Proton # from the file named "proton", import the Proton class
class Database:
my_proton = Proton() # create a Proton object
print(my_proton.a_tags) # access the a_tags object from the Proton object and print
答案 1 :(得分:0)
假设您已导入 Proton,如果您希望它以最少的更改工作:
def testfall_db(self):
p = Proton() # need to create the instance first
p.test() # call the test method to initialize those values
# access those values from the `p` instance of Proton created above
self.curr.execute('''INSERT INTO testfall VALUES(?,?)''',(p.cases,p.links,))
self.curr.execute('''SELECT cases FROM testfall WHERE cases=?''', [p.cases])
self.conn.commit()
例如,您的代码中的 self.cases
正在调用不存在的数据库实例的 cases
变量 -> None
。