元组的实例在枚举类中没有成员(pylint nomember)

2024-10-02 18:16:38 发布

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

当使用枚举类中的成员“value”和“equals”时,我从pylint得到以下错误: “code”:“无成员” “message”:“tuple”的实例没有“value”成员 版本: 派林特2.3.1 星形2.2.5 Python 3.6.3

代码按预期执行。我只是想知道我是否做错了什么(我不是一个专业的python程序员),或者是否有一种更“python”的方法来实现同样的结果:

from enum import Enum

class DefaultEnum(Enum):

    def __new__(self,val,_name,_type):
        obj = object.__new__(self)
        obj._value_ = val
        obj._publicName = _name
        obj._type = _type
        return obj

    def __str__(self):
        return self._publicName

    def equals(self,_string):
        return _string == str(self)

class GlobalEnum(DefaultEnum):
    TRUE = 0,'True',str()
    FALSE = 1,'False',str()


GlobalEnum.TRUE.value
>> 0
GlobalEnum.TRUE.equals('True')
>> True
repr(GlobalEnum.TRUE)
>> <GlobalEnum.TRUE: 0>

我目前正在使用“#pylint:disable=no member”注释禁用警告,但我不希望这样做。。。对于白名单类也是一样,因为我仍然希望pylint报告其他发现。在


Tags: selftrueobjreturnvaluedeftype成员
1条回答
网友
1楼 · 发布于 2024-10-02 18:16:38

回答你的主要问题:

  1. pylintdoesn't recognize动态创建的属性,以及
  2. Enumnumber of ways中是“特殊的”,其中之一是枚举的成员实际上是enum类的实例:
    from enum import Enum

    class MyEnum(Enum):
        val1 = 0

    print(type(MyEnum.val1)) # <enum 'MyEnum'>


    class MyClass:
        val1 = 0

    print(type(MyClass.val1)) # <class 'int'>

也就是说,当您在GlobalEnum类中设置TRUE时,Python正在将TRUE转换为GlobalEnum的实例,但是pylint不理解这一点,因为看起来GlobalEnum.TRUE被分配了一个元组值,pylint认为它是一个没有“value”成员的元组。在

要回答是否有更“Python式”的方法来达到同样的效果,我不确定你想达到什么目的,但看起来你在做一些奇怪的事情。例如:

  1. __new__()将传递一个作为其第一个参数,但您将其称为“self”,根据(接近)通用约定,它指的是一个实例,读起来非常混乱。通常人们会称之为cls

  2. 按惯例,单前导下划线(“_name,“_type”)通常用于表示“私有”成员,因此在函数签名中使用它们会让大多数读者感到困惑。如果您想使用保留字作为参数名,一个常见的约定是使用尾随下划线(例如“type_”、“exec_”)。

  3. 我不确定您想用“_type”属性完成什么,但是现在GlobalEnum.TRUE和{}都将返回一个空字符串作为它们的_type,因为str()返回一个字符串实例,如果没有参数,字符串将是空的。如果您希望它返回str类型,那么应该将其设置为str(不带括号)。

  4. 我认为您要做的是创建一个枚举,当与定义中指定的int或string进行比较时,它的值将计算为True。在这种情况下,您可以重写内置的equals()方法,而不是用户定义的equals()方法(您几乎肯定会忘记使用它),这样您就可以使用通常的==运算符:

^{pr2}$

[注意,上面的str_value只是一个常规的类属性,这意味着可以设置它。要使其只读,可以使用不带setter的property decorator。]

相关问题 更多 >