Это был глупый вопрос, на который есть глупый ответ.Весь смысл traitlets
в том, что «внешнему наблюдателю» атрибуты, являющиеся каким-то типом трейлета, кажутся «нормальными».Другими словами, они предназначены только для наблюдения «извне» , то есть через слой косвенности, обеспечиваемый определением класса, но не предназначены для проверки «напрямую».
Вот MWE того, что я имею в виду:
import traitlets
class Fruits(traitlets.HasTraits):
test_list = traitlets.List(trait=traitlets.Unicode(), default_value=['apple', 'orange'])
def choose_fruit(self):
fruit = self.test_list[0]
return fruit
salad = Fruits()
salad.test_list()
['apple', 'orange']
salad.choose_fruit()
'apple'
for fruit in salad.test_list:
print(fruit)
apple
orange
Но если вы начнете делать (как я изначально делал с REPL в блокноте Juptyer):
import traitlets
test_list = traitlets.List(trait=traitlets.Unicode(), default_value=['apple', 'orange'])
и попытаетесь сделать что-то вроде:
test_list[0]
или
for fruit in test_list:
print(fruit)
тогда возникает ошибка о том, что 'List'
объекты не поддерживают индексацию или не повторяются.
Что я пытаюсь сказатьв том, что если кто-то хочет сделать маленькие глупые тесты, подобные этому, с traitlets
на REPL (например, в Jupyter Notebook), то сначала нужно будет ввести слой косвенности, сначала определив класс, для которого эти признаки являются атрибутами (онине может быть проверен напрямую).
Используя тот же MWE, что и в вопросе, нужно сделать что-токе:
import traitlets
class Test1(traitlets.HasTraits):
list = traitlets.List(traitlets.Unicode())
class Test2(traitlets.HasTraits):
list = traitlets.List(trait=traitlets.Unicode())
test1 = Test1()
test2 = Test2()
test1.list == test2.list