2017-09-29 1 views
1

제공된 객체의 속성을 변환하기 위해 매우 긴 if/elif 블록을 포함하는 메소드가 있습니다. 두 가지 방법을 사용하지 않아도됩니다. 메서드가 반복 가능한 목록 또는 반복 불가능한 단일 개체를 사용할 수있는 경우 개체가 반복 가능하지 않은 경우 if/elif 블록을 계속 실행하려면 어떻게해야합니까?옵션 For 절을 사용하여 Python DRY를 준수하는 가장 좋은 방법

는 지금 내 코드는 기본적으로 다음과 같습니다

def convert_orders(orders, orderid=None): 
    """Converts certain fields of an order object to readable and/or indexable values""" 

    status = None 
    color = None 
    order = None 
    converted = [] 

    if not orders: 
     order = session.query(Order).filter(Order.orderid == orderid) 

    for order in orders: 
     # convert order status to a string and give it a color for the tables 
     if order.status == 0: 
      status = 'In Progress' 
      color = QColor(150, 255, 250) 
     elif order.status == 1: 
      status = 'Ready' 
      color = QColor(60, 255, 75) 

# elif continues below for another 70+ lines, converting other attributes. 

orders 경우가 목록으로 제공되지만,이 방법은 또한 내가 중 하나를 변환하는 단 하나 개의 elif 블록을 사용하는 방법을 orderid (정수)를 취할 수 어떤 유형이 제공되는지에 따라 유형이 달라질 수 있습니까? 이 메소드는 한 유형 또는 다른 유형으로 호출되지만 둘 다 사용되지는 않습니다.

+0

가장 쉬운 방법은'orders'가 반복 가능해야한다는 것입니다. 'convert_orders (my_one_order)'대신에 싱글 톤리스트'convert_orders ([my_one_order])'의 문제점은 무엇입니까? – chepner

답변

1
if not orders: 
    ... 
    orders = (order,) 
+0

'AttributeError : 'list_iterator'객체에 'status'속성이 없습니다. – smallpants

관련 문제