类不可调用



我是Python的新手,正在尝试连接到Poloniex API。

他们提供了这个包装器,这很棒。

import urllib
import urllib2
import json
import time
import hmac,hashlib
def createTimeStamp(datestr, format="%Y-%m-%d %H:%M:%S"):
return time.mktime(time.strptime(datestr, format))
class poloniex:
def __init__(self, APIKey, Secret):
self.APIKey = APIKey
self.Secret = Secret
def post_process(self, before):
after = before
# Add timestamps if there isnt one but is a datetime
if('return' in after):
if(isinstance(after['return'], list)):
for x in xrange(0, len(after['return'])):
if(isinstance(after['return'][x], dict)):
if('datetime' in after['return'][x] and 'timestamp' not in after['return'][x]):
after['return'][x]['timestamp'] = float(createTimeStamp(after['return'][x]['datetime']))
return after
def api_query(self, command, req={}):
if(command == "returnTicker" or command == "return24Volume"):
ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command))
return json.loads(ret.read())
elif(command == "returnOrderBook"):
ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command + '&currencyPair=' + str(req['currencyPair'])))
return json.loads(ret.read())
elif(command == "returnMarketTradeHistory"):
ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + "returnTradeHistory" + '&currencyPair=' + str(req['currencyPair'])))
return json.loads(ret.read())
else:
req['command'] = command
req['nonce'] = int(time.time()*1000)
post_data = urllib.urlencode(req)
sign = hmac.new(self.Secret, post_data, hashlib.sha512).hexdigest()
headers = {
'Sign': sign,
'Key': self.APIKey
}
ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/tradingApi', post_data, headers))
jsonRet = json.loads(ret.read())
return self.post_process(jsonRet)

def returnTicker(self):
return self.api_query("returnTicker")
def return24Volume(self):
return self.api_query("return24Volume")
def returnOrderBook (self, currencyPair):
return self.api_query("returnOrderBook", {'currencyPair': currencyPair})
def returnMarketTradeHistory (self, currencyPair):
return self.api_query("returnMarketTradeHistory", {'currencyPair': currencyPair})

# Returns all of your balances.
# Outputs:
# {"BTC":"0.59098578","LTC":"3.31117268", ... }
def returnBalances(self):
return self.api_query('returnBalances')
# Returns your open orders for a given market, specified by the "currencyPair" POST parameter, e.g. "BTC_XCP"
# Inputs:
# currencyPair  The currency pair e.g. "BTC_XCP"
# Outputs:
# orderNumber   The order number
# type          sell or buy
# rate          Price the order is selling or buying at
# Amount        Quantity of order
# total         Total value of order (price * quantity)
def returnOpenOrders(self,currencyPair):
return self.api_query('returnOpenOrders',{"currencyPair":currencyPair})

# Returns your trade history for a given market, specified by the "currencyPair" POST parameter
# Inputs:
# currencyPair  The currency pair e.g. "BTC_XCP"
# Outputs:
# date          Date in the form: "2014-02-19 03:44:59"
# rate          Price the order is selling or buying at
# amount        Quantity of order
# total         Total value of order (price * quantity)
# type          sell or buy
def returnTradeHistory(self,currencyPair):
return self.api_query('returnTradeHistory',{"currencyPair":currencyPair})
# Places a buy order in a given market. Required POST parameters are "currencyPair", "rate", and "amount". If successful, the method will return the order number.
# Inputs:
# currencyPair  The curreny pair
# rate          price the order is buying at
# amount        Amount of coins to buy
# Outputs:
# orderNumber   The order number
def buy(self,currencyPair,rate,amount):
return self.api_query('buy',{"currencyPair":currencyPair,"rate":rate,"amount":amount})
# Places a sell order in a given market. Required POST parameters are "currencyPair", "rate", and "amount". If successful, the method will return the order number.
# Inputs:
# currencyPair  The curreny pair
# rate          price the order is selling at
# amount        Amount of coins to sell
# Outputs:
# orderNumber   The order number
def sell(self,currencyPair,rate,amount):
return self.api_query('sell',{"currencyPair":currencyPair,"rate":rate,"amount":amount})
# Cancels an order you have placed in a given market. Required POST parameters are "currencyPair" and "orderNumber".
# Inputs:
# currencyPair  The curreny pair
# orderNumber   The order number to cancel
# Outputs:
# succes        1 or 0
def cancel(self,currencyPair,orderNumber):
return self.api_query('cancelOrder',{"currencyPair":currencyPair,"orderNumber":orderNumber})

在一个单独的文件中,我有这个:

import poloniex
myapi = poloniex("My APIKey is here","My Secret is here")
balance = myapi.returnBalances()
print balance

它返回"TypeError: 'module' object is not callable" 以及 "E1102:poloniex is not callable"。

我做错了什么?同样,我是python和编码的新手,所以我可能正在做一些愚蠢的事情:)

这表明import poloniex实际上并没有在当前命名空间中放置具有该名称的类。请参阅他们的文档以了解 如何准确import,但在这种情况下,解决方案通常类似于from poloniex import poloniex.

正交地,您可以保持原样import,而是将代码更改为使用poloniex.poloniex()而不是poloniex()

如果不清楚,我们说的是"from filename importclassname"而不是"importfilename";错误消息基本上是说">filename是一个文件名,而不是一个类名"。

定义良好的模块有一个__init.py__可以为您处理这些事情。 有时作者写了文档,但后来忘记按照他们计划的方式实际设置这些东西__init__.py。 如果他们只在源代码树中运行测试,则不会测试该功能的这一方面。

最新更新