2016-06-10 17 views
1

我正在使用来自新sortedcontainers模块的SortedListWithKey类(link)。有没有办法改变列表特征来指定我想要一个SortedListWithKey(Instance(SomeClass), key=some_key)SortedListWithKey的性状

更具体地讲,如何才能做到这样的:

from traits.api import HasTraits, Instance, SortedListWithKey # i know it cannot really be imported 

class MyClass(HasTraits): 
    sorted_list = SortedListWithKey(Instance(ElementClass)) 
+0

你的意思是一个'SortedListWithKey(实例(SomeClass的),关键= some_key)'? – mgilson

+0

抱歉不清楚。我想要的是一种使用'SortedListWithKey(Instance(SomeClass))'而不是'List(Instance(SomeClass))'的方法。 'key'部分是'SortedListWithKey'的细节,它是一个函数,用于定义列表元素是如何进行红外线的。 – MindV0rtex

+0

它可能取决于你的情况'SomeClass'是什么类。它当然需要是一个迭代器,然后你提供给'key'参数的东西需要是一个可调用的函数,作为迭代器元素的比较点,它本身可以是一个Trait,就像简单的例子如下: –

回答

1

你的问题再次寻找后,我想你在找什么为是访问SortedListWithKey对象,就好像它是一个的方式列表并使用TraitsTraitsUI机器来验证/查看/修改它。 Property特性在这里可以帮助您查看SortedListWithKey作为list。我已经修改我的代码下面的例子有另一个特点是Property(List(Str)),并用一个简单的TraitsUI查看:

from sortedcontainers import SortedListWithKey 

from traits.api import Callable, HasTraits, List, Property, Str 
from traitsui.api import Item, View 


class MyClass(HasTraits): 
    sorted_list_object = SortedListWithKey(key='key_func') 

    sorted_list = Property(List(Str), depends_on='sorted_list_object') 

    key_func = Callable 

    def _get_sorted_list(self): 
     return list(self.sorted_list_object) 

    def default_key_func(self): 
     def first_two_characters(element): 
      return element[:2] 
     return first_two_characters 

    def default_traits_view(self): 
     view = View(
      Item('sorted_list', style='readonly') 
     ) 
     return view 


if __name__ == '__main__': 
    example = MyClass() 
    example.sorted_list_object = SortedListWithKey(
     ['first', 'second', 'third', 'fourth', 'fifth'] 
    ) 
    example.configure_traits()