2016-11-07 48 views
0

好吧,這應該是微不足道的,但我卡住了 - 代碼是存在的,應該沒問題。我如何實例化這個繼承類

class Connect(object): 
    def __init__(self, database, user, password, host, port): 
     super(Connect, self).__init__() 
     self.database = database 
     self.user = user 
     self.password = password 
     self.host = host 
     self.port = port 

class Process(Connect): 
    def __init__(self, **kwargs): 
     super(Process, self).__init__(**kwargs) 

我可以實例連接容易

local_connection=Connect(database, user, password, host, port) 

如何實例化進程?

如果我做 Process(database, user, password, host, port) - 錯誤是 - 類型錯誤:初始化()到底需要6個參數(1給出)

如果我做

Process(local_connection) 

的錯誤是 - 類型錯誤:初始化()需要剛好1個參數(給出2)

如果我嘗試

Process() 

Errorr是 - 類型錯誤:初始化()到底需要6個參數(1給出)

+2

我傾向於不同意你認爲現有代碼很好的斷言。從「進程」轉到「連接」是恕我直言,只是破碎。 –

+2

爲什麼'Process'只採用'self'和'** kwargs'?爲什麼不給它與它從繼承的類相同的簽名?或位置'* args'? – jonrsharpe

+0

謝謝,我認爲這是不正確的..但人們一直在使用它一段時間,我錯誤地認爲它可能很好。 – Illusionist

回答

1

您可以通過兩種方式解決這個問題:

  1. 一起創建Process的對象與參數的名稱爲:

    >>> Process(database='database', user='user', password='password', host='host', port='port') 
    <__main__.Process object at 0x7f4510150a10> 
    
  2. OR,使用*args隨着**kwargsProcess.__init__()爲:

    class Process(Connect): 
        def __init__(self, *args, **kwargs): 
         super(Process, self).__init__(*args, **kwargs) 
    

    ,只是傳遞參數去__init__()不帶參數爲:

    >>> Process('database', 'user', 'password', 'host', 'port') 
    <__main__.Process object at 0x7f4510150950> 
    

另請參考:What does ** (double star) and * (star) do for parameters?爲了解*args**kwargs之間的差異。

+1

謝謝匿名 – Illusionist

+1

除了*'** kwargs'之外,使用'* args' *而不是它。 – user2357112

+0

@ user2357112:是的,已更新 –