python - 使用多个输入执行“类” - 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)
由于某种原因,它卡住了,并且无缘无故地不继续执行,有什么想法吗?
解决方案
您正在尝试覆盖循环变量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)
推荐阅读
- angular5 - 未设置猫头鹰日期时间值
- node.js - 如何在 DynamoDB 的 UpdateExpression 中将额外属性设置为 null?
- c# - 无法在 ASP.NET 5.0 中设置 cookie
- angular - 角度嵌套的 Observable
- datastage - 在 DataStage 11.7 中将字符串模式转换为空格
- wordpress - 通过“meta_value_num”订购 WP_Query,同时使用“offset”
- reactjs - 如何在 vs 代码中部署 react.js?
- floating-point - 负十进制数/字符串到 IEEE 单精度格式
- jenkins - 更改詹金斯端口
- javascript - 如何在图表上显示三条线