我有一个模块fi
,其中定义了以下类:
class CashFlows(Asset):
def __init__(self, amounts : pandas.Series, probabilities : pandas.Series = None):
amounts = Asset.to_cash_flows()
if probabilities is None:
probabilities = pandas.Series([1]*len(amounts), index=amounts.index)
然后我在其中使用了此方法的另一个类Bond(fi.Asset)
,这是调用CashFlows
的地方:
def to_cash_flows(self, notional : float = 100.0) -> fi.asset.CashFlows:
#Bunch of stuff here which is not related
series = pandas.Series(list_of_data, indices_of_data)
return fi.CashFlows(series)
我收到错误obiwan.ObiwanError:__init__(probabilities) is None but should be <class 'pandas.core.series.Series'>
,但我认为我正在使用if
语句解决这种错误的可能性。 obiwan
只是我在单元测试中使用的Python类型检查包。
谢谢
答案 0 :(得分:1)
您可以使用集合指定备用约束类型:
def example5(x: {int,float}):
...
从表面上看,你似乎应该替换:
probabilities : pandas.Series = None
使用:
probabilities : {pandas.Series, type(None)} = None
这将告诉obiwan,参数是可接受的值。
obiwan实际上并没有将转换为函数本身,并不关心将参数与None进行比较的if
语句。它只关注函数声明。