Изменить параметр свойства из конструктора класса [Python / Traits]

Я новичок в python - извините, если моя терминология неверна. У меня есть класс, который наследует атрибуты Enthought Traits. Вот упрощенная версия:

from enthought.traits.api import HasTraits, Range
from enthought.traits.ui.api import View, Item

class GUIThing(HasTraits):

    my_slider = Range(0.0, 0.6, 0.1)
    my_slider._high = 0.7   # works; not what I need 'coz not instance-dependent

    view = View( Item('my_slider') )

    def __init__(self, arg1):
        # Call the parent's __init__
        HasTraits.__init__(self)

        self.my_slider._high = arg1  # what I need; doesn't work

# -- Main program -----

top_range = 0.9

my_gui = GUIThing(top_range)
my_gui.configure_traits()

Это просто создает окно с ползункомв нем, первоначально изменяющимся от 0,0 до 0,6 с начальным значением 0,1. При создании экземпляра GUIThing я хочу изменить максимальное значение ползунка в зависимости от текущего значения top_range. Однако строка

self.my_slider._high = arg1

приводит к

AttributeError: 'float' объект не имеет атрибута '_high'

Когда внутри __init__(), self.my_sliderвозвращает не объект ползунка, а текущее значение ползунка.

Что я делаю не так? Спасибо!

Редактировать:

Следующее также не работает:

class GUIThing(HasTraits):

    def __init__(self, arg1):
        # Call the parent's __init__
        HasTraits.__init__(self)

        self.my_slider = Range(0.0, arg1, 0.0)

    view = View( Item('my_slider') )

Это был бы прямой способ сделать то, что я пытаюсь сделать, но это приводит к графическому интерфейсу, где вместо ползунка есть текстовое поле с надписью «enthought.traits.trait_types.Range object at 0xa61946c».Итак, проблема в том, что когда my_sliderсоздается внутри __init__(), тогда «my_slider» означает сам объект(который не отображается должным образом через View ); но если my_sliderсоздается вне __init__(), тогда "my_slider" означает текущее значение(число с плавающей точкой, которое предотвращает доступ к свойствам объекта) .

Не уверен, что это особенность свойств или я просто не знаю, как правильно инициализировать объекты.

6
задан Pteridium 31 March 2012 в 17:29
поделиться