2014-04-04 159 views
0

我創建了一個python腳本來創建一個IRC客戶端。從對象中調用父類方法的最佳方法

我現在想給它添加一個聊天機器人功能。

因此,我的IRC客戶端的python腳本有很多方法,並且看起來相當龐大,所以我想也許最好創建一個chatbot對象,它可以從IRC客戶端讀取消息事件併發送適當的消息。我正在以正確的方式思考這個問題?

class IRCClient: 
#client code 
myGreetingBot = GreetingBot() 


def SendToIRC(self, message): 
    # send code implemented here 
    # getting here from the created object is a problem 

while 1: 
    # this main loop continously checks a readbuffer for messages and puts them into a buffer 
    #event driven method calling with IRCClient 
    if ("JOIN" == buffer[1]): 
     myGreetingBot.process(message) 


class GreetingBot(): 
    def process(): 
     #getting here isn't a problem 
     self.SendMessage() 

    def SendMessage(): 
     # here I want to call the SendToIRC() function of the class that created this object 

很抱歉,如果不是很清楚,但也許它顯示了)我想實現和b)我做錯了。

+1

這很難說,你想用碎縮進做什麼。將代碼粘貼回來,然後選擇它並按下[編輯]工具欄上的[{}'按鈕以縮進所有適當的4個空格 – mhlester

+0

代碼將不會運行,我只是在我考慮問題時才寫它。我真的只是要求最好的方式來擴展我的基類的funcionality。也許我只需要閱讀更多關於python的繼承。 – user3406725

+0

雖然我明白你的意思,但我不是父類。您需要將客戶端傳遞給GreetingBot()的構造函數(或adda屬性並設置它)並將其存儲在成員中,然後您可以通過該成員調用其上的任何方法 –

回答

0

IRCClient不是GreetingBot的父親,反之亦然。所有你擁有的是其中包含的另一個

一個實例來實現亞型基因多態性與有GreetingBot是一個子類的IRCClient一類,你需要從父類擴展,像這樣:

class IRCClient: 
    # write all the standard functions for an IRCClient.. Should be able to perform unaware of GreetingBot type 
    ... 

class GreetingBot(IRCClient): 
    # GreetingBot is extending all of IRCClient's attributes, 
    # meaning you can add GreetingBot features while using any IRCClient function/variable 
    ... 

至於標題「從對象中調用父類的方法的最佳方式」,..如果GreetingBot是IRCClient的子項,則可以從GreetingBot實例調用每個IRCClient函數。如果你想卻更代碼添加到函數(例如__init__),你可以做這樣的事情:

class IRCClient: 
    def __init__(self): 
     # do IRCClient stuff 
     ... 

class GreetingBot(IRCClient): 
    def __init__(self): 
     # call parent initialize first 
     super(GreetingBot, self).__init__() 
     # now do GreetingBot stuff 
     ...