首页 > 解决方案 > 使用多个输入执行“类” - Python

问题描述

我这里有一个简化的代码。(原代码太多了,放不下)

import time
class Stock:

    def __init__(self,  Asset):
        self.Asset = Asset
        self.i_init = 0
        self.i_Ana = 0


    def Initiate_sequence(self):
        self.i_init +=1

        """One Execute Once"""
        print("Initiate Program")

    def Analysis(self):


        """Need to Execute every 60 Seconds"""
        self.i_Ana += 1

        print(self.Asset)
        print(f"Init {self.i_init}")
        print(f"Ana {self.i_Ana}")

我想像这样执行程序(这个执行没有问题):

stock_one =  Stock("stock_one")
stock_one.Initiate_sequence()

stock_two =  Stock("stock_two")
stock_two.Initiate_sequence()

stock_three =  Stock("stock_three")
stock_three.Initiate_sequence()


while True:
    stock_one.Analysis()
    stock_two.Analysis()
    stock_two.Analysis()
    time.sleep(10)

但是,有超过 3 只股票,所以我需要“for 循环”来迭代这个资产列表

我做了:

Assets = ["stock_one", "stock_two", "stock_three"]
for asset in Assets:
    asset = Stock(asset)
    asset.Initiate_sequence() # Initialize all the assets

while True:                   # Loop each asset analysis module every 10 seconds
    for asset in Assets:
        asset.Analysis()
    time.sleep(10)

现在它给出了错误

Initiate Program
Initiate Program
Initiate Program
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-12-420b1a82343b> in <module>
      6 while True:                   # Loop each asset analysis module every 10 seconds
      7     for asset in Assets:
----> 8         asset.Analysis()
      9     time.sleep(10)
     10 

AttributeError: 'str' object has no attribute 'Analysis'

知道如何解决这个问题吗?很受好评。


随着丹尼尔的回答我做到了

Assets = ["stock_one", "stock_two", "stock_three"]
stocks = map(Stock, Assets)

while True:
    for stock in stocks:
        stock.Analysis()
    time.sleep(10)

由于某种原因,它卡住了,并且无缘无故地不继续执行,有什么想法吗?

标签: python

解决方案


您正在尝试覆盖循环变量asset,这在 Python 中不起作用。

如果您Assets在 cast 之后检查变量asset = Stock(asset),您会发现它只是字符串,而不是Stock您尝试创建的实例。这就是您收到'str' object has no attribute 'Analysis'错误的原因。

相反,我会执行以下操作:

# Variables and class methods/properties should be lower-case
# Only classes are upper case
assets = ["stock_one", "stock_two", "stock_three"]

stocks = list(map(Stock, assets))
# The line above is (mostly) equivalent to
# stocks = [Stock(asset) for asset in assets]
# or to
# stocks = []
# for asset in assets:
#   stocks.append(Stock(asset))

while True:
  for stock in stocks:
    stock.analysis()
  time.sleep(10)

推荐阅读