2015-01-12 64 views
0

我用我想調用的方法得到A類。來自另一個類的PyQt4調用方法

class Class_A(QtGui.QMainWindow): 
    def __init__(self, database, tableName): 
     QtGui.QWidget.__init__(self) 
     self.dbu = database_manager_2.DatabaseUtility(database, tableName) 
     self.setupUi(self) 

    def setupUi(self, Class_A): 
     ... 

    def print_somethig (self): 
      print 'hello' 

這是B類:

class class B(object):    
    def setupUi_1(self, Dialog): 
     ... 
     self.my_instance = Class_A() 
     QtCore.QObject.connect(self.pushButtonSecond, QtCore.SIGNAL(_fromUtf8("clicked()")),self.my_instance.print_something()) 

正如你可以看到我已經創建了從A類的實例,這樣我就可以調用它的方法在B類

我得到這個錯誤:

TypeError: __init__() takes exactly 3 arguments (1 given)

我知道這與OOP有關。

+0

我認爲錯誤信息是不言自明的。在實例化類時,您需要爲三個變量提供__init__方法:self,database和tableName。 Python自己照顧第一個 - 只有兩個去! –

+0

是的,但我認爲必須有一些方法來克服這個可變的需求,因爲畢竟我不想提供和數據庫的表,我只是想調用位於該類內的方法,就是這樣。 – user3532371

+0

@ user3532371:我回答了你的問題。只有這兩種可能性。但是用你的原始簽名,沒有辦法調用Class_A()將會工作。 – ProgrammingIsAwsome

回答

1

那沒什麼用OOP相關:

你的方法簽名是:

def __init__(self, database, tableName): 

所以,如果你撥打: a = Class_A()你只能得到1個參數(自被隱含作爲參數)。 有沒有可以克服它。您可以定義默認值,這樣的:

def __init__(self, database=None, tableName=None): 

所以,如果你撥打:

a = Class_A() 

數據庫和表名會無。但後來:

self.dbu = database_manager_2.DatabaseUtility(database, tableName) 

我覺得會引發錯誤。

但與您的原始方法簽名,沒有辦法解決這個問題。