小编jim*_*qaz的帖子

在C++中,变量声明左侧的括号是什么意思?

这个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]

c++

51
推荐指数
1
解决办法
2820
查看次数

IronPython 3支持?

是的,我知道IronPython 3兼容性,但那是两年前的事.我在互联网上搜索,但找不到任何最新的信息.

那么IronPython是否支持Python 3?如果没有,有多少未来的导入工作,是否有任何特定于Iron的方法使它看起来更像Python 3?

python ironpython python-3.x

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

Python 数据类:如果 __post_init__ 执行类型转换,要使用什么类型?

我有一个 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 的内容。MyList
  • 如果我只提供了最后的MyList类型,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 的公告中对这个问题进行了评论: …

python python-dataclasses

8
推荐指数
2
解决办法
1212
查看次数

从Python子进程模块解释示例管道

第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?什么样的亲密关闭?究竟是什么关闭?

请考虑这是一个学术问题,除了更好地理解这些事情之外我不想做任何事情.

python subprocess

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

如何在Qt Creator中设置选项卡小部件的背景颜色?

我正在使用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  - 带样式表

图A - 带样式表

图B  - 没有样式表

图B - 没有样式表

user-interface qt4 qt-designer

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

如何调用模拟mockito对象的实际构造函数?

我有类似的代码

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,因为它是通过构造函数注入的?

java junit unit-testing mockito powermock

5
推荐指数
1
解决办法
7144
查看次数

当 ruamel.yaml 从字符串加载 @dataclass 时,不会调用 __post_init__

假设我创建了一个@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.

python yaml ruamel.yaml

5
推荐指数
2
解决办法
1250
查看次数

如何比较持有 numpy.ndarray 的数据类的相等性(bool(a==b) 引发 ValueError)?

如果我创建一个包含 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)

摘抄:

  3          12 LOAD_FAST                0 (self)
             14 LOAD_ATTR                1 (foo)
             16 LOAD_FAST                0 (self) …
Run Code Online (Sandbox Code Playgroud)

python numpy python-dataclasses

5
推荐指数
1
解决办法
3406
查看次数