2016-04-12 15 views
-2

我有下面的代碼。我只需要調用bt.BT_ON。我不想使用繼承概念。我有什麼方法可以實現它嗎?我是python的新手。我有以下代碼。**沒有繼承概念**。我猜構圖有幫助

from __future__ import print_function 
class tool(object): 
    def BT_ON(self): 
     print("BT on") 
    def WIFI_ON(self): 
     print("WIFI on") 
class BTMGR(object): 
    def __init__(self): 
     self.tl = tool() 

bt=BTMGR() 
bt.BT_ON() 

我試圖做以下,

class tool(object): 
    def __init__(self,parent): 
     print(parent) 
     self.parent=parent 
    def BT_ON(self): 
     print("BT on") 
    def WIFI_ON(self): 
     print("WIFI on") 
class BTMGR(object): 
    def __init__(self): 
     self.tl = tool(self) 
class WIFIMGR(object): 
    def __init__(self): 
     self.tool = tool() 

bt=BTMGR() 
bt.BT_ON() 

但它沒有工作。我不知道在父母身上放什麼東西。

我想從BTMGR本身的實例中使用工具的方法。 BTMGR中沒有重複的方法。

+2

請提供一個更有意義的稱號! – Jan

+1

請也澄清你的問題。 –

+0

Thanks.hope現在澄清 –

回答

2

如果您想直接使用類tool的方法從BTMGR類,那麼你別無選擇,只能重複它們的定義:

class BTMGR(object): 
    def __init__(self): 
     self.tl = tool(self) 
    def BT_ON(self): 
     self.tl.BT_ON() 

class WIFIMGR(object): 
    def __init__(self): 
     self.tool = tool() 
    def WIFI_ON(self): 
     self.tool.WIFI_ON() 

bt = BTMGR() 
bt.BT_ON() 

wf = WIFIMGR() 
wf.WIFI_ON() 
+0

重複不好,沒有優化的權利? –

+1

你並沒有真正複製它,你正在將實現委託給你的'工具',所以這很好。你只是複製公共接口,爲底層實現提供了一個鬆散耦合(這是一件好事)。 – poke

+0

這也是不被接受的情況。可以請告訴我,如果有其他方式? –

相關問題