<div dir="ltr">Hello,<div><br></div><div>I am working on using traitlets.config in my project. The application has this structure:</div><div><br></div><div><font face="monospace, monospace">class Writer(Configurable):</font></div><div><font face="monospace, monospace">    writer_trait = Int(4).tag(config=True)</font></div><div><font face="monospace, monospace">    common_dir = Unicode('').tag(config=True)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">class Acquire(Configurable):</font></div><div><font face="monospace, monospace">    acquire_trait = Int(55).tag(config=True)</font></div><div><font face="monospace, monospace">    common_dir = Unicode('').tag(config=True)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">class Pipeline(Configurable):</font></div><div><font face="monospace, monospace">    common_dir = Unicode('').tag(config=True)</font></div><div><font face="monospace, monospace">    def initialize(self):</font></div><div><font face="monospace, monospace">        self.writer = Writer()</font></div><div><font face="monospace, monospace">        self.acquire = Acquire()</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">class PipelineApp(Application):</font></div><div><font face="monospace, monospace">    classes = [Pipeline, Acquire, Writer]</font></div><div><font face="monospace, monospace">    def initialize(self,argv=None):</font></div><div><font face="monospace, monospace">        self.pipeline = Pipeline(config=self.config)</font></div><div><font face="monospace, monospace">        self.pipeline.initialize()</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">The idea is that the common_dir traits should be all the same. The code works as written, but results in three possible lines in the settings file. Since the settings file is just python, it's not too bad to do</font></div><div><font face="monospace, monospace">c.Pipeline.common_dir = '/output'</font></div><div><font face="monospace, monospace">c.Acquire.common_dir = c.Pipeline.common_dir</font></div><div><span style="font-family:monospace,monospace">c.Writer.common_dir = c.Pipeline.common_dir</span><font face="monospace, monospace"><br></font></div><div><span style="font-family:monospace,monospace"><br></span></div><div><font face="arial, helvetica, sans-serif">But it seems like there should be a better way.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I see that I could pass in a parent and access it that way:</font></div><div><font face="monospace, monospace">self.writer = Writer(parent=self)</font></div><div><br></div><div>and then in writer:</div><div><font face="monospace, monospace">self.parent.common_dir</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">But then if I want to use Writer on its own, I need to do a check if self.parent.... or something.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Is there a better way? I hope the intent is clear, please let me know if not.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Thanks,</font></div><div><font face="arial, helvetica, sans-serif">Glenn</font></div></div>