【问题标题】:How to create a type alias for a queue.SimpleQueue?如何为 queue.SimpleQueue 创建类型别名?
【发布时间】:2021-03-03 08:25:01
【问题描述】:

我只是想为内置 SimpleQueue 创建类型别名,例如:

import queue
import typing

my_queue_t = queue.SimpleQueue(maxsize=10)

但是我得到以下错误:

AttributeError: module 'queue' has no attribute 'SimpleQueue'

如何解决这个问题?

【问题讨论】:

  • 根据文档, SimpleQueue 在 Python 3.7 中是新的。你用的是什么版本的 Python?
  • 另外,请注意您所做的不是类型别名;您只是在尝试构建单个 SimpleQueue 对象。
  • 版本 3.6.8。如何为 queue.Queue 创建类型别名?
  • 不,因为array('B', [0, 0, 0]) 返回的是一个实例,而不是一个类型。我不认为你想要一个类型别名,我认为你想要一个构造你想要的东西并返回它的函数。如果没有更多的上下文,很难确定。类型别名和TypeVars 和NewTypes 有很多用途,但我不认为这是其中之一。 :)
  • SimpleQueue 是一种类型,但“SimpleQueue of maximum size 10”不是一种类型。并非所有的 Python 对象类别都是类型。

标签: python queue alias typedef


【解决方案1】:

您所描述的并不是真正的类型别名——您不是简单地创建对 SimpleQueue 的引用,而是定义一个具有不同语义的新类(即 maxsize 固定为 10 )。实现这一点的典型方法是通过子类:

from queue import SimpleQueue

class MyQueue(SimpleQueue):
    def __init__(self):
        SimpleQueue.__init__(self, maxsize=10)

另一种选择是定义一个工厂函数,该函数使用您想要的选项创建SimpleQueue

def my_queue_t() -> SimpleQueue:
    return SimpleQueue(maxsize=10)

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多