这个GitHub文件的代码使用了我不熟悉的C++变量"声明"语法:
std::unique_ptr<CRecentFileList> {m_pRecentFileList} = std::make_unique<CRecentFileList>(...
Run Code Online (Sandbox Code Playgroud)
(m_pRecentFileList在超类中声明为红色.)
将大括号中的变量声明包装起来是什么意思?(不是初始化列表)
我提取了一个最小的测试用例,它编译:
class foo {
int* p;
void f(){
std::unique_ptr<int> {p} = std::make_unique<int>(1);
}
};
Run Code Online (Sandbox Code Playgroud)
更改int* p以std::unique_ptr<int> p创建由于的编译错误unique_ptr(const unique_ptr&) = delete;
这使我认为braced声明分配给具有相同名称的外部作用域变量.我尝试创建一个测试程序,但无法编译:
int main(){
int x;
int {x} = 1;
}
Run Code Online (Sandbox Code Playgroud)
error: using temporary as lvalue [-fpermissive]
是的,我知道IronPython 3兼容性,但那是两年前的事.我在互联网上搜索,但找不到任何最新的信息.
那么IronPython是否支持Python 3?如果没有,有多少未来的导入工作,是否有任何特定于Iron的方法使它看起来更像Python 3?
我有一个 Python 类,它的字段可以传递几种序列类型之一。为了简化,我将坚持使用元组和列表。__init__将参数转换为MyList.
from typing import Union
from dataclasses import dataclass, InitVar, field
class MyList(list):
pass
@dataclass
class Struct:
field: Union[tuple, list, MyList]
def __post_init__(self):
self.field = MyList(self.field)
Run Code Online (Sandbox Code Playgroud)
我应该使用什么类型的field声明?
field始终为 a 的内容。MyListMyList类型,PyCharm当我通过抱怨Struct()一个list。我可以改为使用:
_field: InitVar[Union[tuple, list, MyList]] = None
field: MyList = field(init=False)
def __post_init__(self, _field):
self.field = MyList(_field)
Run Code Online (Sandbox Code Playgroud)
但这非常难看,尤其是在 3 个字段中重复时。此外,我必须构造一个类似的结构Struct(_field=field)而不是Struct(field=field).
2018 年 4 月,《tm》在 PyCharm 的公告中对这个问题进行了评论: …
第17.1.4.2节:替换 python子进程模块的shell管道表示要替换
output=`dmesg | grep hda`
Run Code Online (Sandbox Code Playgroud)
同
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
Run Code Online (Sandbox Code Playgroud)
对第三行的评论解释了为什么调用close函数,而不是为什么它有意义.对我来说,它没有.调用通信方法之前是否会关闭p1.stdout以防止通过管道发送任何输出?(显然它不会,我试图运行代码,它运行正常).为什么有必要调用close来使p1接收SIGPIPE?什么样的亲密关闭?究竟是什么关闭?
请考虑这是一个学术问题,除了更好地理解这些事情之外我不想做任何事情.
我正在使用Qt Creator.在我的GUI中,我使用了一个标签小部件.此小部件应具有与主窗口相同的灰色背景颜色(图片A).我通过在Qt Designer中编辑样式表来完成这个:
background-colour: rgb(240, 240, 240);
Run Code Online (Sandbox Code Playgroud)
但现在我有两个我无法解决的新问题:
因为我在图B中更改了GUI样式表.
我也试过了
QPalette pal = m_pUi->tabWidget->palette();
pal.setColor(m_pUi->tabWidget->backgroundRole(), Qt::blue);
m_pUi->tabWidget->setPalette(pal);
Run Code Online (Sandbox Code Playgroud)
但这只会改变标签后面的颜色,而不是整个"标签窗口 - 表面"的整个颜色.
我是否必须制作其他样式说明,还是有更简单的解决方案?

图A - 带样式表

图B - 没有样式表
我有类似的代码
class superClass {
public String transform(String str) {
//lots of logic including ajax calls
return("Modified"+str);
}
}
class baseClass extends superClass {
private FetchData fetchData;
baseClass(FetchData fetchData) {
this.fetchData = fetchData;
}
public String parse() {
String str = fetchData.get();
//some more logic to modify str
return transform(str);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用mockito和junit来测试它.我在嘲笑baseClass和做这样的事情
baseClass baseMock = Mockito.mock(baseClass.class);
Mockito.when(baseMock.parse()).thenCallRealMethod();
Mockito.when(baseMock.transform()).thenReturn("Something");
Run Code Online (Sandbox Code Playgroud)
我如何注入模拟fetchData,因为它是通过构造函数注入的?
假设我创建了一个@dataclass class Foo,并添加了一个__post_init__来执行类型检查和处理。
当我尝试yaml.load一个!Foo对象时,__post_init__不会被调用。
from dataclasses import dataclass, fields
from ruamel.yaml import yaml_object, YAML
yaml = YAML()
@yaml_object(yaml)
@dataclass
class Foo:
foo: int
bar: int
def __post_init__(self):
raise Exception
for field in fields(self):
value = getattr(self, field.name)
typ = field.type
if not isinstance(value, typ):
raise Exception
s = '''\
!Foo
foo: "foo"
bar: "bar"
'''
yaml.load(s)
Run Code Online (Sandbox Code Playgroud)
通过 ruamel.yaml 加载数据类时如何执行参数检查?
此行为发生在 Python 3.7 以及带有pip install dataclasses.
如果我创建一个包含 Numpy ndarray 的 Python 数据类,我将无法再使用自动生成的数据类__eq__。
import numpy as np
@dataclass
class Instr:
foo: np.ndarray
bar: np.ndarray
arr = np.array([1])
arr2 = np.array([1, 2])
print(Instr(arr, arr) == Instr(arr2, arr2))
Run Code Online (Sandbox Code Playgroud)
ValueError:包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()
这是因为ndarray.__eq__ 有时返回ndarray真值,通过比较a[0]来b[0],等等等等到2。这是相当复杂的,不直观的时间越长,而实际上只提高在阵列不同的形状,或者有错误不同的价值观什么的。
如何安全地比较@dataclasses 持有 Numpy 数组?
@dataclass的实现__eq__是使用生成的eval()。它的源在堆栈跟踪中丢失,无法使用 来查看inspect,但它实际上使用的是调用 bool(foo)的元组比较。
import dis
dis.dis(Instr.__eq__)
Run Code Online (Sandbox Code Playgroud)
摘抄:
Run Code Online (Sandbox Code Playgroud)3 12 LOAD_FAST 0 (self) 14 LOAD_ATTR 1 (foo) 16 LOAD_FAST 0 (self) …
python ×5
c++ ×1
ironpython ×1
java ×1
junit ×1
mockito ×1
numpy ×1
powermock ×1
python-3.x ×1
qt-designer ×1
qt4 ×1
ruamel.yaml ×1
subprocess ×1
unit-testing ×1
yaml ×1