2013-06-11 6 views
0

Я пытаюсь узнать, как сделать графический интерфейс с помощью свойств. Я новичок в объектно-ориентированном программировании, и я новичок в Python. Большинство примеров, которые я смог найти в сети, не используют конструктор в подклассе Hastraits. Должен ли я забыть про def init (self, * arg) конструктор? Или я должен заставить себя использовать его?Должен ли я использовать конструктор с подклассом HasTraits

Например, беря пример из: Change property parameter from within class constructor [Python/Traits]

код из DrSAR для меня самый простой и элегантный из всех примеров; и все же он не использует конструктор. Я что-то пропустил ?

Заранее спасибо за вашу помощь,

LLG

ответ

3

Короткий ответ: нет, не писать __init__() инициализаторами когда подклассов из HasTraits.

Класс HasTraits определяет общий и очень гибкий __init__(), который принимает заданные ему аргументы ключевых слов и присваивает значения соответствующим атрибутам. Ваш подкласс будет наследовать этот инициализатор. Учитывая, что определения признаков обычно обеспечивают разумные значения по умолчанию для каждого атрибута, обычно нет причин требовать другого инициализатора. Бывают случаи, когда вы хотите переопределить этот инициализатор, но они относительно редки. Я мог бы делать это только каждые 100 или около того классов, которые я пишу.

Если вы хотите, чтобы практические написание инициализаторов для стандартного подкласса из объекта Python, извините. Черты имеют свой собственный набор конвенций и лучших практик, которые вы будете изучать в дополнение к общим принципам OO и Python; некоторые из первых будут обсуждать последний.

+0

Спасибо, это решило мою проблему, что я не мог понять иначе (проблема: '@ on_trait_change' не работал). – JoePasq