在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 使用for 的時(shí)候調(diào)用函數(shù)多次,導(dǎo)致類初始化多次,然而類的初始化參數(shù)又依賴于傳參

使用for 的時(shí)候調(diào)用函數(shù)多次,導(dǎo)致類初始化多次,然而類的初始化參數(shù)又依賴于傳參.如何改進(jìn)思路.

類 的定義

class AbuPickTimeWorker(AbuPickTimeWorkBase):
 
    def __init__(self, cap, kl_pd, benchmark, buy_factors, sell_factors):
        self.capital = cap
        self.kl_pd = kl_pd
        self.combine_kl_pd = ABuSymbolPd.combine_pre_kl_pd(self.kl_pd, n_folds=1                      
        self.benchmark = benchmark
        self.init_buy_factors(buy_factors)
        self.init_sell_factors(sell_factors)
        self.filter_long_task_factors()
        #不初始化
        self.orders = list()
        self.task_pg = None
        
    def _day_task(self, today):
        sell = mockTrading()
        self._task_attached_sell(today, how='day')
        for sell_factor in self.sell_factors:
            sell_factor.read_fit_day(today, self.orders)
    
        for buy_factor in self.buy_factors:
            if not buy_factor.lock_factor:
                order = buy_factor.read_fit_day(today)
                if order and order.order_deal:
                    self.orders.append(order)

函數(shù)調(diào)用類的方法,類初始化多次,如何不初始化多次,使得self.orders不初始化,使用單例模式,回導(dǎo)致orders一直不變,想實(shí)現(xiàn)每個(gè)實(shí)例初始化一次.

   def stockBuy(read_cash, buy_factors, sell_factors, choice_symbol,date,env=None):
   
        abupy.env.g_enable_ml_feature = True
        abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
        commission_dict = {
            'buy_commission_func': buy_commission_ch,
            'sell_commission_func':sell_commission_ch}
        
        benchmark = AbuBenchmark()
        capital = AbuCapital(
            read_cash,
            benchmark,
            commission_dict)
        kl_pd_manager = AbuKLManager(benchmark, capital)
        
        kl_pd = kl_pd_manager.get_pick_time_kl_pd(choice_symbol)
        #初始化多次???
        time_work = stockSell(
            capital,
            kl_pd,
            benchmark,
            buy_factors,
            sell_factors)
        try:
            if date == datetime.datetime.today().strftime('%Y%m%d'):
                today_time = kl_pd[:date].iloc[-1]
                # print (today_time)
                # 調(diào)用類的方法
                time_work._day_task(today_time)
                return time_work.orders
            else:
                today_time = kl_pd[:date].iloc[-2]
                # print (today_time)
                time_work._day_task(today_time)
                return time_work.orders
        except TypeError:
            pass

調(diào)用函數(shù)

if __name__ == '__main__':
    stock_300 = pd.read_csv(
        '../src/000300closeweight.csv',
        encoding='gbk',
        dtype={
            '成分券代碼Constituent Code': str})
    stock_300.sort_values(by='權(quán)重(%)Weight(%)', ascending=False, inplace=True)
    choice_symbols = stock_300[:100]['成分券代碼Constituent Code'].tolist()
    choice_symbols = list(set(choice_symbols))
    print(choice_symbols)
    
    read_cash = 200000
    buy_factors = [
        {
            'fast': 5, 'slow': 20, 'class': AbuDoubleMaBuy}, {
            'xd': 60, 'class': AbuFactorBuyBreak}, {
            'xd': 42, 'class': AbuFactorBuyBreak, 'position': {
                'class': AbuKellyPosition}, }]
    sell_factors = [
        {'stop_loss_n': 1.0, 'stop_win_n': 3.0,
         'class': AbuFactorAtrNStop},
        {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5},
        {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}]

    commission_dict = {
        'buy_commission_func': buy_commission_ch,
        'sell_commission_func': sell_commission_ch}
    benchmark = AbuBenchmark()

    capital = AbuCapital(
        read_cash,
        benchmark,
        commission_dict)
    kl_pd_manager = AbuKLManager(benchmark, capital)

    kl_pd = kl_pd_manager.get_pick_time_kl_pd(choice_symbol)

    buy = stockSell(cap, kl_pd, benchmark, buy_factors, sell_factors)
    start_day = datetime.date(2017, 6, 1)
?。J褂胒or 的時(shí)候調(diào)用函數(shù)多次,導(dǎo)致類初始化多次,然而類的初始化參數(shù)又依賴于傳參.如何改進(jìn)思路.
    for i in range(300):
        start_day += datetime.timedelta(days=1)
        """
        methods:
        buy.singnal_sell(code,date)
        buy.mulit_process_sell(code_list,date,n_jobs)
        """
      
        result = stockBuy(read_cash,buy_factors,sell_factors,choice_symbols[0],str(
                        start_day.strftime('%Y%m%d')),env=None)
        print ('result',[r for r in list(result) if r])

單例模式代碼

def singleton(cls):
    instances = {}

    def wrapper(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return wrapper
回答
編輯回答
糖豆豆

這種問題,把代碼簡化了說明比較好。
參數(shù)是變的,根本也就不存在“初始化多次”的問題,因?yàn)楸旧砭褪切枰鄠€(gè)狀態(tài)的。

# -*- coding: utf-8 -*-

class A(object):
    def __init__(self, i):
        print i

for i in range(10):
    A(i)

如上代碼,如果本身需要那個(gè)變化的 i ,那么不同的 i 創(chuàng)建不同的 A 的實(shí)例是沒有問題。(不是唯一的處理方式)

2017年5月27日 08:34