小编Mig*_*dge的帖子

如何在 Python 中对对象的属性执行类型保护

PEP 647引入了类型防护来使用函数执行复杂的类型缩小操作。如果我有一个属性可以具有各种类型的类,是否有一种方法可以对作为函数参数给出的对象的属性执行类似的类型缩小操作?

class MyClass:
    """
    If `a` is `None` then `b` is `str`
    """
    a: Optional[int]
    b: Optional[str]
    # Some other things

def someTypeGuard(my_obj: MyClass) -> ???:
    return my_obj.a is not None
Run Code Online (Sandbox Code Playgroud)

我想我可能有必要在类型提示中实现一些与方括号有关的东西,但我真的不知道从哪里开始。

python python-typing typeguards

11
推荐指数
1
解决办法
2971
查看次数

使用 __slots__ 有缺点吗?

我正在使用 Python 3.7 和 Django。我正在读关于__slots__. 显然,__slots__可以通过提前列出所有对象属性来优化大量此类对象的内存分配。

class MyClass(object):
    __slots__ = ['name', 'identifier']
    def __init__(self, name, identifier):
        self.name = name
        self.identifier = identifier
        self.set_up()
Run Code Online (Sandbox Code Playgroud)

我可能很明显的问题是为什么我们不想对所有对象都这样做?使用有什么缺点吗__slots__

python django memory-management python-3.x

6
推荐指数
1
解决办法
1981
查看次数

有没有办法在 Visual Studio Code 中定义自定义重构?

可以定义 VS Code 可以自动完成的自定义代码片段。这些甚至可以使用占位符,以便可以根据需要填写空白。

/* Before */

//=

/* After (for example) */

// [title]
//===============================
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是下一步,它可以进行选择并将其替换为包含原始代码的占位符(嵌入占位符也是一个优点)。

/* Before */
some.code();
where.I = am;
doing = stuff;

/* After (for example) */
some('surrounding code which contains the original code', () => {
  some.code();
  where.I = am;
  doing = stuff;
});
Run Code Online (Sandbox Code Playgroud)

上面只是我想要实现的一个示例 - 周围的代码可以采用任何形式。

refactoring automated-refactoring visual-studio-code

6
推荐指数
0
解决办法
498
查看次数

在 VS Code 中调试 Python 时如何自定义对象的字符串表示形式

我正在尝试调试我正在 VS Code 中处理的一个相当复杂的 python 脚本,并且我意识到,如果我使用的类以有意义的方式表示,我的生活会容易得多。

目前,调试面板将我的对象表示为类似的东西<foo.Bar object at 0x000002C643F960A0>,但我更愿意通过覆盖它的某些功能来指定它们应该如何呈现。

我尝试过重写该__str__()函数但无济于事。遗憾的是我的谷歌搜索没有找到任何有用的东西。

任何想法表示赞赏!

如果这是转发,我们深表歉意 - 类似的问题无法正确滚动。

python debugging visual-studio-code

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