想象一下以下情况:
class Food {}
protocol Growable {}
class Animal<T: Food> {}
let animal1 = Animal<Food>() // Ok
let animal2 = Animal<Food & Growable>() // Compile error: 'Animal' requires that 'Food & Growable' inherit from 'Food'
很显然,如果我们有一个Food & Growable
类型的变量,那么这个变量也是Food
类型的变量。但是T
类的通用参数Animal
不能专用于类型Food & Growable
。为什么会这样?
答案 0 :(得分:1)
错误消息有些奇怪,但是您尝试执行的操作无效。
您不能使用协议创建泛型。创建泛型时,必须使用具体类型。不是协议。
df['Month_End_Date'] = (pd.to_datetime(df['Month_End_Date'], format='%m/%d/%Y')
.dt.to_period('m').dt.to_timestamp())
df['g'] = df.groupby('Month_End_Date').cumcount()
df = df.set_index('Month_End_Date')
df.loc[df.index[-1] + pd.offsets.MonthEnd(1)] = df.iloc[-1]
df = df.groupby('g').resample('d').ffill().reset_index(level=0, drop=True)
df2 = df[df.groupby(['g', df.index.to_period('m')]).cumcount() < 28]
print (df2.tail())
A B C D g
Month_End_Date
2019-06-24 Espeon Evolution 16868 6035 1
2019-06-25 Espeon Evolution 16868 6035 1
2019-06-26 Espeon Evolution 16868 6035 1
2019-06-27 Espeon Evolution 16868 6035 1
2019-06-28 Espeon Evolution 16868 6035 1
不是具体类型。
您需要一个子类:
Food & Growable
或者,如果class GrowableFood: Food, Growable {
...
}
let animal2 = Animal<GrowableFood>()
为Animal
,则可以扩展Food
:
Growable