你不愿意吗
AMZN
加入
Portfolio
你创建的对象?考虑一下你拥有多个投资组合的场景,所有的投资组合都拥有AMZN股票。AMZN控股公司应该是谁
AMZN.amount
提到
此外,假设我以3000英镑的价格购买20股AMZN股票,以1500英镑的价格再购买20股AMZN股票,它应该指的是这些购买中的哪一种?它应该给你一个
列表
属于
Stock
那个股票行情器的对象?
我建议你定义
Portfolio.stockPortfolio
作为一个
collections.defaultdict
对象然后,你可以定义一个
__getitem__()
方法
文件夹
以股票代码为例
p["AMZN"]
并从中返回正确的列表
stockPortfolio
.如果你真的想使用以下属性访问投资组合的资产
p.AMZN
,你可以定义
__getattr__()
方法然而,我强烈推荐你
不要
这样做是因为@martineau在他们的
comment
上图:
Why you don't want to dynamically create variables
和
Keep data out of your variable names.
import collections
class Stock:
def __init__(self, ticker, price, amount):
self.ticker = ticker
self.price = price
self.amount = amount
def __repr__(self):
return f"Stock('{self.ticker}', {self.price}, {self.amount})"
# Create portfolio to hold stocks and available funds
class Portfolio:
def __init__(self, funds):
self.funds = funds
self.stockPortfolio = collections.defaultdict(list)
# Buying a stock and adding it to the portfolio
def buyStock(self, ticker, price, amount):
#Add stock to portfolio
stk = Stock(ticker, price, amount)
self.stockPortfolio[ticker].append(stk)
def __getitem__(self, ticker):
return self.stockPortfolio[ticker]
def __getattr__(self, ticker):
return self.stockPortfolio[ticker]
我加了一个
__repr__
到
股票
这样我们就可以看到列表中的库存对象包含了什么。
p = Portfolio(100000)
p.buyStock("AMZN", 3000, 20)
print(p["AMZN"])
# Output: [Stock('AMZN', 3000, 20)]
p.buyStock("AMZN", 3500, 10)
print(p.AMZN)
# Output: [Stock('AMZN', 3000, 20), Stock('AMZN', 3500, 10)]