класс вопросов python возвращает объект и список хранилищ

#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