#NEWLINE# def __init__( self , abstract = False , extends = None , merges = None , type_alias = None , **kwargs ) : #NEWLINE# #INDENT# 'Creates a new struct data blob.\n\n    By default Structs are anonymous (un-named), concrete (not `abstract`), and they neither\n    inherit nor merge another Struct.\n\n    Inheritance is allowed via the `extends` and `merges` channels.  An object inherits all\n    attributes from the object it extends, overwriting any attributes in common with the extended\n    object with its own.  The relationship is an "overlay".  For the merges, the same rules apply\n    for as for extends working left to right such that the rightmost merges attribute will overwrite\n    any similar attribute from merges to its left where the main object does not itself define the\n    attribute.  The primary difference is in handling of lists and dicts.  These are merged and not\n    over-written; again working from left to right with the main object\'s collection serving as the\n    seed when present.\n\n    A Struct can be semantically abstract without setting `abstract=True`. The `abstract`\n    value can serve as documentation, or, for subclasses that provide an implementation for\n    `validate_concrete`, it allows skipping validation for abstract instances.\n\n    :param bool abstract: `True` to mark this struct as abstract, in which case no\n                          validation is performed (see `validate_concrete`); `False` by default.\n    :param extends: The struct instance to inherit field values from.  Any shared fields are\n                    over-written with this instances values.\n    :type extends: An addressed or concrete struct instance that is a type compatible with\n                   this struct or this structs superclasses.\n    :param merges: The struct instances to merge this instance\'s field values with.  Merging\n                   is like extension except for containers, which are extended instead of replaced;\n                   ie: any `dict` values are updated with this instances items and any `list` values\n                   are extended with this instances items.\n    :type merges: An addressed or concrete struct instance that is a type compatible with\n                  this struct or this structs superclasses.\n    :param **kwargs: The struct parameters.\n    ' #NEWLINE# kwargs = _normalize_utf8_keys ( kwargs ) #NEWLINE# self . _kwargs = kwargs #NEWLINE# self . _kwargs [ 'abstract' ] = abstract #NEWLINE# self . _kwargs [ self . _TYPE_ALIAS_FIELD ] = type_alias #NEWLINE# self . extends = extends #NEWLINE# self . merges = merges #NEWLINE# if self . address : #NEWLINE# #INDENT# ( target_name , _ , config_specifier ) = self . address . target_name . partition ( '@' ) #NEWLINE# if ( self . name and ( self . name != target_name ) ) : #NEWLINE# #INDENT# self . report_validation_error ( 'Address and name do not match! address: {}, name: {}' . format ( self . address , self . name ) ) #NEWLINE# #UNINDENT# self . _kwargs [ 'name' ] = target_name