2017-08-28 44 views
0

假設我有一個變量可以幫助我在一個我正在導入的模塊中使用的網絡連接(例如:API訪問令牌)(用於擴展現有函數),有沒有辦法通過變量到導入的腳本而無需添加新的類或方法來初始化它?使用導入文件中的變量?

如:

一個腳本(performer.py):

import telepot 
import botActions # Possibly adding an argument here? 

botActions.sendMessage("locationID", "message") 

accessToken = "SAMPLE" 

腳本兩(botActions.py):

import botApiWrapper 

def sendMessage(locationID, text): 
    bot.sendMessage(locationID, text) 
    print("Message sent to %g: %t".format(g=locationID, t=text)) 

bot = botApiWrapper.Bot(sys.argv[0]) 

那麼,有沒有辦法將變量傳遞給第一個腳本中的第二個腳本,或者我必須定義一個我稱爲af的初始化函數導入文件?

+1

你從表演進口accessToken'嘗試'? –

+0

真的不清楚你在問什麼。你打算如何處理另一個文件中的變量? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ這將在本地範圍內工作,但有沒有辦法從模塊的角度來做到這一點?例如,如果我決定分享我的代碼,並希望將它作爲一個模塊發佈,該模塊將託管在與新用戶的主腳本的潛在位置不同的目錄中。 –

回答

1

執行此類操作的規範方法是從另一個文件中定義一個初始化函數。取而代之的bot = botApiWrapper.Bot(sys.argv[0]),嘗試像

def newbot(arg): 
    bot = botApiWrapper.Bot(arg) 
    return bot 

,然後調用該函數從其他模塊。

+0

爲什麼一個工廠的功能而不是一個班? –

+0

兩者都很好;但James的問題(1)提到初始化函數是他想知道的,並且(2)關注的是更通用的「傳遞給模塊的參數」,所以我想比一個類更普遍。不是說python中的工廠函數和類真的不一樣。 –

+0

這就是我的觀點 - 它們*不是*不同。事實上,如果有人真正以合理的方式實現示例代碼,我希望你的「Bot」是一個類;另一方面,「初始化函數」的*不合理的*實現可能是修改模塊範圍的變量的一種,而在答案中含糊不清則適用於後者。 –

0

如果您需要狀態來操作,請定義一個類。

class Bot(object): 
    def __init__(self, arg): 
     self.arg = arg 
    def sendMessage(self, locationId, text): 
     print "Using arg %s to send message to location %s with text %s" % \ 
      (self.arg, locationId, text) 

...之後讓你喜歡你初始化儘可能多的機器人:

import botApiWrapper 

botA = botApiWrapper.Bot("A") 
botA.sendMessage("foo", "bar") 

botB = botApiWrapper.Bot("B") 
botB.sendMessage("baz", "qux") 
相關問題