小编And*_*ndy的帖子

访问类型为 Union 的变量的属性会引发错误

我对UnionPython 静态类型中的用法有点困惑。

class A():
    foo: int = 10

class B():
    bar: str = 'hello'

def get_object() -> Union[A, B]:
    return B()

var = get_object()
var.bar
Run Code Online (Sandbox Code Playgroud)

上面的片段返回 error: Item "A" of "Union[A, B]" has no attribute "bar"

文档状态

Intersection 和 Union 之间的交互很复杂,但如果您了解正则集合的交集和 union 之间的交互,应该不会感到惊讶

这让我相信可以像使用or类型一样使用类型变量,而类型检查器不会抛出错误Union[A, B]AB。这不正确吗?

如果是这样,我怎样才能实现模仿这一点的功能?(即 from 的值get_object可以用作类型AorB

python static-typing python-3.x

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

std :: vector中的对象没有正确保存属性

我遇到的问题是,当我更改对象的属性时,更改不是"保存".更容易向您展示正在发生的事情.

我正在学习c++并决定建立一个小型国际象棋应用程序.每个Piece都是一个单独的对象.

它们存储在std::vector这样的中

std::vector<Piece> pieces;
Run Code Online (Sandbox Code Playgroud)

他们是这样初始化的

for (int i = 0; i < 2; i++)
{
    Piece p;
    p.Init(i*2+1, 1, renderer, SQUARE_SIZE, "king");
    pieces.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)

当我点击鼠标时我想选择所有部分(暂时)

for (int i = 0; i < pieces.size(); i++)
            {
                Piece p = pieces[i];
                p.Select();
            }
Run Code Online (Sandbox Code Playgroud)

问题是,在Select()调用函数时,到渲染selected属性的时候是false.奇怪的是,这不会发生在未被包含在内的作品vectork.

在你问之前我的代码中没有任何地方设置selectedfalse:)(除了构造函数:P)

此外,如果你想要downvoting,请先给我发表评论然后我会尝试解决它的问题!

这是整个文件.(不确定这是否是插入它们的正确方法)

Piece.h

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDl_image.h>
#include <array> …
Run Code Online (Sandbox Code Playgroud)

c++ class stdvector

-1
推荐指数
1
解决办法
928
查看次数

标签 统计

c++ ×1

class ×1

python ×1

python-3.x ×1

static-typing ×1

stdvector ×1