我正在使用来自新SortedListWithKey模块(link)的sortedcontainers类。有没有一种方法可以使List特性适应我想要的SortedListWithKey(Instance(SomeClass), key=some_key)

更具体地说,如何实现以下目标:

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

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

最佳答案

再次查看您的问题之后,我认为您正在寻找的是一种访问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()

关于python - SortedListWithKey的特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37758544/

10-08 21:42