Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python'is_trait_type'与'Date'不兼容`_Python_Date_Traits - Fatal编程技术网

Python'is_trait_type'与'Date'不兼容`

Python'is_trait_type'与'Date'不兼容`,python,date,traits,Python,Date,Traits,在我工作的项目中,我们经常需要将文本转换为特征值。通常,我们使用is_trait_type方法进行适当的转换 然而,它不适用于日期特征。这里是一个MWE: from traits.has_traits import HasTraits from traits.trait_types import Int, Date class A(HasTraits): a_date = Date an_int = Int a = A() class_traits = a.class_tra

在我工作的项目中,我们经常需要将文本转换为特征值。通常,我们使用is_trait_type方法进行适当的转换

然而,它不适用于日期特征。这里是一个MWE:

from traits.has_traits import HasTraits
from traits.trait_types import Int, Date

class A(HasTraits):
    a_date = Date
    an_int = Int

a = A()
class_traits = a.class_traits()
print class_traits["an_int"].is_trait_type(Int)
print class_traits["a_date"].is_trait_type(Date)
Int的行为符合预期,但日期失败,原因是:

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

我们使用Ubuntu14.04下的EnThound traits模块4.1.0版。

如注释中所述,日期和时间特征类型不是类,而是实例。is_trait_typex方法检查self.trait_type是否是所提供类的实例,即x的值,因此如果x不是类,它将失败。在我看来,这是API中的一个bug

如果需要解决方法,可以定义如下方法:

def my_is_trait_type(trait, trait_type):
    if isinstance(trait_type, BaseInstance):
        return trait.is_trait_type(trait_type.__class__)
    else:
        return trait.is_trait_type(trait_type)

然而,我会重新考虑使用is_trait_type来寻找合适的转换。例如,也许一张地图就可以了。

这是什么特质模块?最重要的事情,最重要的事情,或者其他什么?Date是traits.trait_types.BaseInstance对象,而不是您需要的soDate@PadraicCunningham:不是Date.\uuuuu类\uuuuuu只是将成为traits.trait\u type.BaseInstance?这看起来像是检查要么不起作用,要么将所有BaseInstance类型特征都视为等效的,这两个特征似乎都没有用。@abarnert,是的,你是对的。我也看不到在is_trait_类型的文档中使用的日期。日期与其他类型不同,它是使用BaseInstance和datetime创建的。日期日期=BaseInstancedatetime.Date,编辑器=日期编辑器