Python检查参数是特定对象的列表

2024-06-23 03:15:20 发布

您现在位置:Python中文网/ 问答频道 /正文

试图实现一个只获取特定对象列表的函数,但似乎无法实现它

假设我们有一个功能测试:

def testing(myTypes=None):
    if myTypes:
        if isinstance(myTypes, list) and all([isinstance(item, myType) for item in myTypes]):
            print("Correct")
        else:
            print("myTypes must be a list of myType object only")
    else:
        print("No myTypes provided")

class myType:
    a = "a"
    b = "b"
    c = "c"

testing()
testing(['xd'])
testing([myType.a, myType.b])

输出为:

No myTypes provided
myTypes must be a list of myType object only
myTypes must be a list of myType object only

但我希望最后一个的输出为“Correct”。是的,我知道我最终会在参数中发送一个字符串,因此它不是一个myType对象,但似乎无法理解应该如何做

所以有两个问题:

  1. 如果我想以这样的方式实施它,那怎么办呢
  2. 最后,我真正想做的就是将某些有效字符串限制为myTypes的有效选项,但我认为将其放入类中是最好的,因此假设用户可以使用IDE的intellisense轻松查看myType的可用成员/选项。简言之,实现这一目标的最佳方式是什么。是的,拥有一组字符串并检查myTypes中提供的所有字符串是否都存在于该字符串集中是很容易的,但是用户需要知道这个列表,可能会出现拼写错误,拥有一个类(imo)更容易

Tags: of对象字符串only列表ifobjectbe
1条回答
网友
1楼 · 发布于 2024-06-23 03:15:20

您需要将myType更改为^{}

from enum import Enum

class myType(Enum):
    a = "a"
    b = "b"
    c = "c"

我现在得到这个输出:

No myTypes provided
myTypes must be a list of myType object only
Correct

myType作为EnummyType.a现在不同于"a"。这导致您的第二个示例仍然失败,但您的第三个示例现在是正确的。Enum还表示一组强类型的固定值,这是“将某些有效字符串限制为有效选项”的完美用例

请注意,您应该将myType重命名为MyType,并将abc大写。这是Enum的惯例

相关问题 更多 >

    热门问题