2017-08-16 14 views
-1

更新されたコードスニペット: 私は 'self'に更新しました。グローバルではなく、慣習ではあるが、依然として唯一の値を持つことで、クラスレベルで割り当てられた空の文字列が返されますが、これを削除するとエラーがスローされます。あなたはNameError:名前が定義されていません

class A(object): 
    c = '' 

のようにクラスレベルの変数を定義するとき

class MainDialog(QWidget, qcDbWidget4.Ui_qcQueryWidget): 

    dbDir = '' 
    DbSelection = '' 
    dbPath = '' 
    TabSelection = '' 
    exportDir = '' 
    exportFileName = '' 

    def __init__(self, parent=None): 
     super(MainDialog, self).__init__(parent) 
     self.setupUi(self) 
     self.connect(self.dbDirSelect, SIGNAL("clicked()"), self.getDirFileNames) 
     self.connect(self.dbSelectButton, SIGNAL('clicked()'), self.selectDb) 
     self.connect(self.tabSelectButton, SIGNAL('clicked()'), self.selectTab) 
     self.connect(self.exportDirSelect, SIGNAL("clicked()"), self.getExportDir) 
     self.connect(self.exportButton, SIGNAL("clicked()"), self.setExportName) 
     self.connect(self.querySubmitButton, SIGNAL("clicked()"), self.setQueryParams) 
     self.connect(self.querySubmitButton, SIGNAL("clicked()"), self.dbQuery) 

    def getDirFileNames(self): 
     self.dbDir = str(QFileDialog.getExistingDirectory(self)) 
     self.dbDirDisplay.setText(self.dbDir) 

     dbFileList = [] 
     for root, dirs, files in os.walk(self.dbDir): 
      for file in files: 
       if file.endswith('.db'): 
        dbFileList.append(file) 

     self.dbSelection.addItems(dbFileList) 
+2

エラーを返す行はどれですか?他の答えはあなたが見たことがありますか? – jmoon

+3

'global'は使わないでください。あなたはおそらく 'self.qcLevelCode'を探しています。 – Ryan

+0

それは来ているようです:queryStatement = "SELECT * FROM" + qcTabSelect + "WHERE" + qcLevelSelectを一番下に移動 – RGETLB

答えて

2

あなたは、静的クラス変数やインスタンス変数として「C」を使用(またはその両方が、それは混乱だ)ことができます。静的クラス変数として使用する場合は、A.c(静的変数、クラス全体、インスタンスメソッドの外部からアクセス可能)として使用する必要があります。インスタンス変数として使用する場合は、self.c(すべてのインスタンスに独自の変数)を使用する必要があります。この場合の変数としてcは定義されません。global cを使用しようとすると、NameErrorが発生します。

+0

クラスレベルで最初に定義されていない変数が定義されていない場合に、変数が定義されていないというエラーが返され続け、再割り当てのためにグローバルに設定されます。変数をインスタンスとして定義し、値を割り当て、同じクラス内の別のメソッドで参照するにはどうすればよいですか? – RGETLB

+0

self.qcLevelCodeは、あなたがどこかに何かを割り当てない限り、定義された値(あなたの場合は '')と等しくなります。これは '__init__' - コンストラクタで行うことができます。 'self.qcLevelCode =" LCU "'のようなステートメントを持つメソッド、または 'inst'' inst.qcLevelCode =" LCU "'のような変数にインスタンスが割り当てられているメソッドの場合。 – varela

関連する問題