#python
Вопрос:
Я новичок в python, и у меня есть код ниже:
class Order:
def __str__(self):
return self.order_type
def __init__(self, order_type, price, quantity, direction):
self.order_type = order_type
self.price = price
self.quantity = quantity
self.direction = direction
class OrderBook:
def __init__(self, bids=[], asks=[]):
self.bids = SortedList(bids, key = lambda order: -order.price)
self.asks = SortedList(asks, key = lambda order: order.price)
def submit(self, order):
if order.direction == 'buy':
self.bids.add(order)
self.bids= sorted(self.bids,key = lambda order:order.price)
print(self.bids)
elif order.direction == 'sell':
self.asks.add(order)
self.asks= sorted(self.asks,key = lambda order:order.price)
print(self.asks)
def remove(self, order):
if order.direction == 'buy':
self.bids.remove(order)
elif order.direction == 'sell':
self.asks.remove(order)
res1 = OrderBook()
print(res1.submit(Order("AAPL",70,1,'buy')))
print(res1.submit(Order("DIS",70,1,'buy')))
print(res1.submit(Order("DIS",80,1,'buy')))
он возвращается ниже:
[<__main__.Order object at 0x106d7e908>]
None
Я хочу использовать функцию представить в магазине несколько заказов для заявки спрашивает, и по цене.
Эл.г. вход: приказа(«компании»,70,1, «продавать»), ордена(«Дис»,15,2,’купить’,), ордена(«Дис»,15,1, «купить»)
Какой синтаксис я должен добавить в свой код и как распечатать список заявок/запросов?
Комментарии:
1. Вы должны объяснить, почему существующий код не делает то, что вы хотите.
2. Вам не нужно использовать
sorted()
, такSortedList
как автоматическая сортировка.3. Спасибо! Я удалил сортировку () и печать(self.bids). Он возвращает SortedKeyList([ Объект заказа в 0x106cfa1d0>], ключ=><книга заказов функций.__инициализация__.<локальные>.<локальные><лямбда> в 0x106d99950<лямбда>>). как я могу отобразить эти данные?
Ответ №1:
В список вставьте проблему:
Если вы хотите отправить список объектов для отправки, вы можете сделать что-то вроде этого:
def submit(self, order):
#if input are a single order
if isinstance(order ,Order):
if order.direction == 'buy':
self.bids.add(order)
self.bids= sorted(self.bids,key = lambda order:order.price)
print(self.bids)
elif order.direction == 'sell':
self.asks.add(order)
self.asks= sorted(self.asks,key = lambda order:order.price)
print(self.asks)
#if the input ar a list of orders
elif isinstance(order ,list):
#for each object in list
for o in oreder:
if o.direction == 'buy':
self.bids.add(o)
self.bids= sorted(self.bids,key = lambda x:x.price)
elif order.direction == 'sell':
self.asks.add(order)
self.asks= sorted(self.asks,key = lambda order:order.price)
print(self.asks)
else:
#do something if input is not expected, or pass
pass
и, наконец, используйте это:
res1.submit([Order("DIS",70,1,'buy'), Order("DIS",80,1,'buy')])
или:
orderList =[Order("DIS",70,1,'buy'), Order("DIS",80,1,'buy')]
res1.submit(orderList)
К проблеме печати:
Вам нужно объявить метод для анализа вашего объекта в строку с шаблоном, который вы хотите для обоих объектов, например:
class Order:
# ...
def __str__(self):
pattern_to_print = "instance of Order('{}',{},'{}')".fomat(order_type, price, quantity, direction)
return pattern_to_print
это напечатает что-то вроде этого :
>>> print(Order("DIS",70,1,'buy'))
instance of Order('DIS',70,1,'buy')
Примечание: в своем коде вы пытаетесь напечатать результат OrderBook.submit
, который не имеет никакого возврата, поэтому он None