Python'is_trait_type'与'Date'不兼容`
在我工作的项目中,我们经常需要将文本转换为特征值。通常,我们使用is_trait_type方法进行适当的转换 然而,它不适用于日期特征。这里是一个MWE: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
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,编辑器=日期编辑器