小编tic*_*ter的帖子

当它们按原样传递给另一个函数时,如何输入提示 kwargs?

假设我有一个完全类型提示的方法,仅包含关键字参数:

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。

python python-typing

8
推荐指数
1
解决办法
1785
查看次数

在seaborn的同一个地块上的多个图表

我正在尝试为某些数据绘制一个条形样式"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只是在同一个图表上绘制它们?

python seaborn

7
推荐指数
1
解决办法
2万
查看次数

为什么纯虚拟/抽象类需要构造函数,特别是对于受保护的const成员变量?

我有一个纯粹的虚拟类定义如下:

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++解决方案搞得一团糟?

感谢大家的帮助.

c++ abstract-class const pure-virtual

4
推荐指数
1
解决办法
1万
查看次数