【发布时间】:2019-05-24 14:48:45
【问题描述】:
我正在尝试使用一个变量的值,它是一个字符串,作为参数,我不断收到“'Str' not callable'错误。我没有使用 str 作为变量名我可以制作代码与eval 合作,但是,我读过关于eval 的可怕警告,所以我不确定该怎么做。我的代码如下。
from time import sleep
from binance.client import Client
from binance.websockets import BinanceSocketManager
class s33():
def __init__(self):
self.client = Client("", "")
self.bm = BinanceSocketManager(self.client)
def process_trade_message(self, message):
global count, conn_key
print(count)
if count >= 10:
print('closing socket')
# use either stop_socket or close, or both
self.bm.stop_socket(conn_key)
self.bm.close()
# reset the count
count = 0
def go(self, sockb):
global count, conn_key
print(sockb['1'])
sock = 'self.bm.'+sockb['1']
print(sock)
count = 0
conn_key = sock(self.process_trade_message)
self.bm.start()
if __name__ == '__main__':
while True:
s = s33()
socka = {'1':'start_miniticker_socket'}
s.go(socka)
sleep(20)
print('sleeping')
我读过人们推荐使用 dict,所以我将 dict 作为 arg 传递并尝试在函数中提取字符串,即下面的代码。我试图提取字符串并将其作为 arg 传递给函数。 s.go(socka['1'],我尝试将变量作为参数传递socka = 'start_miniticker_socket',如果我使用eval('self.bm'+socka),我可以让它工作我尝试了百分号但没有运气。不知道如何在不使用 eval 的情况下执行此操作。我还是个新手,经过几个小时的搜索后找不到替代答案。任何帮助将不胜感激。
【问题讨论】:
-
好吧,你也应该小心
global的使用。最好这样做:instance = s33(conn_manager),然后将count和conn_key作为conn_manager的属性 -
我的意思是如果
conn和conn_key与其他对象共享,最好让它们属于一个共享对象,并使用依赖注入传递该对象。 -
类似这样的一个单独的类?
-
from binance.client import Clientfrom binance.websockets import BinanceSocketManagerclass conn_manager():def __init__():client = Client("", "")bm = BinanceSocketManager(client)count = xconn_key = sock(process_trade_message)抱歉,渲染得很糟糕。 -
感谢您为我提供搜索关键字以帮助我了解我不知道的内容。它依赖注入是我不知道存在的。现在来了解一下。
标签: python variables arguments