【问题标题】:Using getattr to run a function Python使用 getattr 运行函数 Python
【发布时间】:2021-08-29 23:25:02
【问题描述】:

我正在尝试运行函数 Order,它有 2 个版本,如果 Pair 中存在关键字“USDT”,则其中一个函数是 client.LinearOrder.LinearOrder_new(side="Buy",symbol=tradingpair,order_type="Market",qty=1).result(),否则执行 client.Order.Order_new(side="Buy",symbol=tradingpair,order_type="Market",qty=1).result()。当Order_Execution 被拆分为两个Ordergetattr 函数按预期工作时,我试图在不拆分它的情况下运行它,我将如何修改下面的代码以使其正常工作。

工作代码:

def Exec(Pair)
    Order_Execution = "LinearOrder" if "USDT" in tradingpair else "Order" 
    Order_Execution2 = "LinearOrder_new" if "USDT" in tradingpair else "Order_new"
    Order = getattr(getattr(client, Order_Execution), Order_Execution2)(side="Buy",symbol=tradingpair,order_type="Market",qty=1).result()
Exec("BTCUSD")

无效代码:

def Exec(Pair)
    Order_Execution = "LinearOrder.LinearOrder_new" if "USDT" in tradingpair else "Order.Order_new" 
    Order = getattr(client, Order_Execution)(side="Buy",symbol=tradingpair,order_type="Market",qty=1).result()
Exec("BTCUSD")

【问题讨论】:

    标签: python-3.x function format exec conditional-operator


    【解决方案1】:

    您只能拆分它们。第二个参数:

    getattr(obj, attr)
    

    是对象属性的名称。由于有效的 Python 标识符不能包含点,因此您无法正常工作的代码就会失败。
    你为什么不把问题简单化呢?除了使用getattr(),您可以:

    def Exec(Pair):
        if "USDT" in tradingpair:
            Order_Execution = client.LinearOrder.LinearOrder
        else:
            Order_Execution = client.Order.Order_new
        Order = Order_Execution(side="Buy",symbol=tradingpair,order_type="Market",qty=1).result()
    
    Exec("BTCUSD")
    

    注意:函数Exec的参数Pair未被使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 2011-09-13
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      相关资源
      最近更新 更多