def post_init(self):
    # Do all of this work here rather than in __init__
    #  so it can include the effects of any pymodel config modules

    # recognize PEP-8 style names (all lowercase) if present
    if hasattr(self.module, 'accepting'):
      self.module.Accepting = self.module.accepting
    if hasattr(self.module, 'statefilter'):
      self.module.StateFilter = self.module.statefilter
    if hasattr(self.module, 'state_filter'):
      self.module.StateFilter = self.module.state_filter
    if hasattr(self.module, 'stateinvariant'):
      self.module.StateInvariant = self.module.stateinvariant
    if hasattr(self.module, 'state_invariant'):
      self.module.StateInvariant = self.module.state_invariant
    if hasattr(self.module, 'reset'):
      self.module.Reset = self.module.reset

    # assign defaults to optional attributes
    # cleanup and observables are handled in Models base class
    if not hasattr(self.module, 'enablers'):
      self.module.enablers = dict() # all actions always enabled
    if not hasattr(self.module, 'domains'):
      self.module.domains = dict() # empty domains
    if not hasattr(self.module, 'combinations'):
      self.module.combinations = dict() # 'all', Cartesian product
    if not hasattr(self.module, 'Accepting'):
      self.module.Accepting = self.TrueDefault
    if not hasattr(self.module, 'StateFilter'):
      self.module.StateFilter = self.TrueDefault
    if not hasattr(self.module, 'StateInvariant'):
      self.module.StateInvariant = self.TrueDefault

    # Make copies of collections that may be altered by post_init
    self.actions =  list(self.module.actions)
    Model.post_init(self) # uses self.actions
Get a class name and qualify it with a module name if necessary.
dataset/ETHPy150Open jon-jacky/PyModel/pymodel/ModelProgram.py/ModelProgram.post_init--crossover with--dataset/ETHPy150Open deanhiller/databus/webapp/play1.3.x/python/Lib/pydoc.py/classname