假设我有一个完全类型提示的方法,仅包含关键字参数:
class A:
def func(a: int, b: str, c: SomeIntricateTypeHint) -> OutputClass:
...
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个函数,它接受可变关键字参数,并将它们完全传递给该方法:
def outer_func(n_repeat: int, **kwargs: ???) -> OtherOutputClass:
a = A()
for _ in range(n_repeat):
a.func(**kwargs)
Run Code Online (Sandbox Code Playgroud)
这样做,我失去了 类型提示的好处func。我如何输入提示kwargs才能outer_func恢复这些好处?
对于额外的细节,就我而言,我个人不定义func. 它实际上是来自客户端对象的方法boto3。因此,我正在寻找一种动态创建类型提示的解决方案,而不必手动创建 TypedDict。
我正在尝试为某些数据绘制一个条形样式"factorplot",然后绘制一个常规的点样式"factorplot",以便在其上方拟合该数据.所以对于数据图我可以简单地做:
sns.factorplot(x='x',y='yData',data=dataFrame,kind='bar')
Run Code Online (Sandbox Code Playgroud)
对于模型图我可以简单地做:
sns.factorplot(x='x',y='yModel',data=dataFrame,kind='point')
Run Code Online (Sandbox Code Playgroud)
问题是,如果我这样做:
sns.plt.show()
Run Code Online (Sandbox Code Playgroud)
我得到2个单独的数字而不是一个.有没有简单的方法告诉seaborn只是在同一个图表上绘制它们?
我有一个纯粹的虚拟类定义如下:
class BaseClass {
protected:
const int var;
public:
void somefun() = 0; // what I mean by a purely virtual class
// stuff...
};
Run Code Online (Sandbox Code Playgroud)
如果我不添加如此定义的构造函数:
BaseClass(const int & VAR) : var(VAR) {};
Run Code Online (Sandbox Code Playgroud)
我必须在随后的派生类中使用,我的派生类不能将const变量var初始化为它想要的任何值.现在我真的明白这里发生了什么.在构造派生类之前,会调用基类的构造函数,此时必须初始化const成员变量.我的问题不是"如何使我的代码工作"这样的问题,这已经完成了.我的问题是为什么编译器认为这是必要的.对于纯粹的虚拟课程,我不应该被允许写下这样的内容:
class DerivedClass : BaseClass {
public:
DerivedClass() : var(SOME_VALUE) {};
}
Run Code Online (Sandbox Code Playgroud)
如果编译器知道对BaseClass构造函数的调用必然会跟随对某个派生类构造函数的调用(因为抽象类型的对象永远不能被实例化),它不应该给我们更多的回旋余地吗?
这是否是C++选择解决Diamond问题的结果?即使是这种情况,编译器是否应该至少以某种方式允许在派生类中定义纯虚函数的const成员变量的可能性?这太复杂了还是钻石问题的C++解决方案搞得一团糟?
感谢大家的帮助.