首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python从另一个脚本中访问类变量

使用python从另一个脚本中访问类变量
EN

Stack Overflow用户
提问于 2016-02-24 17:26:48
回答 2查看 63关注 0票数 0

当我试图访问self.cursor_dat' from class in different script. It says:ImportError:无法导入名称query_selection_class`时,我遇到了奇怪的错误。在不尝试访问变量的情况下也会发生错误。import命令有问题。

下面是创建变量的file1.py

代码语言:javascript
复制
class connection_settings_class(QtGui.QMainWindow,Ui_main_connection_settings_window):
    def __init__(self):
        self.create_connection_window()
        self.host = 'localhost'
        self.port = '3307'
        self.user = 'root'
        self.password = ''
        self.database = 'rtr'

    def connection(self):
        """ connect to the database and create cursor that will be used to exetute MySQL queries """
        try:
             self.cnxn = pyodbc.connect(driver = '{MySQL ODBC 5.3 ANSI Driver}',  # ANSI or Unicode
                                        host = self.host,
                                        port = self.port,
                                        user = self.user,
                                        password = self.password,
                                        database = self.database)
        except:
            print('Connection FAIL')

        **self.cursor_dat** = self.cnxn.cursor()
        **self.cursor_dat**.execute("""SELECT * FROM test_db.attempt;""")
        row = **self.cursor_dat**.fetchone()
        if row:
            print("Succesfully connected to the database.")
            print row
            self.status_label.setText("Connected")
        else:
            print("Connection FAIL")
            self.status_label.setText("Disconnected")

    def create_connection_window(self):
        ...rest of the code

...and这里是file2

代码语言:javascript
复制
import file1  -> I also tried from file1 import connection_settings_class


class plausible_implausible_class(QtGui.QMainWindow,Ui_plausible_implausible_win):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setupUi(self)
        self.show()
    sc = MyStaticMplCanvas(self.centralwidget, width=500, height=400, dpi=100)
    self.verticalLayout_3.addWidget(sc)
    **a = file1.connection_settings_class.cursor_dat**
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-24 19:53:05

好的,路径没有问题,因为@tdelaney提到的所有脚本都是正的。其结果为'/Users/BauchMAC/PycharmProjects/py_GUI/Database_GUI‘-> True。使用os.getcwd()获得的工作目录是相同的。

我还试着创建两个新脚本,一切都正常运行。所以问题是,我不理解在python中“导入规则”,因为这是问题的根源。

因此,进口跨越存在着明显的问题。解决这一问题的方法是将值作为参数进行传递。

下面您可以看到我是如何做的,以及错误的原因:

file1:

代码语言:javascript
复制
from try4 import ClassB

class ClassA():
    def __init__(self):
        self.cursor_dat = 1
        self.query_selection_win = ClassB()

object1 = ClassA()

档案2:

代码语言:javascript
复制
from try3 import ClassA <-- source of the probles

class ClassB():
    def __init__(self, cursor_dat):
        print(ClassA.cursor_dat)

这里是它应该是怎样的(至少它的工作,我不确定这是否是最好的方法如何做,我仍然是新手)

档案1:

代码语言:javascript
复制
from try4 import ClassB

class ClassA():
    def __init__(self):
        self.cursor_dat = 1
        self.query_selection_win = ClassB(self.cursor_dat)

object1 = ClassA()

档案2:

代码语言:javascript
复制
class ClassB():
    def __init__(self, cursor_dat):
        print(cursor_dat)

我希望它能对像我这样的新手有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2016-02-24 17:40:19

我看你的样本可能犯了一个非常愚蠢的错误,但我看到的是:

代码语言:javascript
复制
 self.cursor_dat= self.cnxn.cursor()

connection_settings_class.connection()方法中定义。您从不调用connection(),因此该属性永远不会被创建。

我还注意到,您是静态地调用类,而不是创建类的实例,但是没有创建静态属性,它们都是在__init__上创建的。您可能希望创建类的一个实例,然后该类首先将cursor_dat定义为None

如果您想要共享连接,您可以设置一个连接池,并仍然创建单独的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35608976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档