@@ -256,6 +256,18 @@ def _make_mapping_property(key):
256
256
)
257
257
258
258
259
+ def _make_static_ro_property (name , val ):
260
+ """Property generator for static cases
261
+
262
+ :type name: str
263
+ :type val: object
264
+ """
265
+ return property (
266
+ fget = lambda _ = None : val ,
267
+ doc = """Read-only {}""" .format (name )
268
+ )
269
+
270
+
259
271
def _py2_str (src ):
260
272
"""Convert text to correct python type"""
261
273
if not _PY3 and isinstance (src , text_type ):
@@ -319,15 +331,9 @@ def __new__(mcs, name, bases, classdict):
319
331
if size is None :
320
332
size = mask .bit_length ()
321
333
322
- classdict ['_size_' ] = property (
323
- fget = lambda _ : size ,
324
- doc = """Read-only bit length size"""
325
- )
334
+ classdict ['_size_' ] = _make_static_ro_property ('size' , size )
326
335
327
- classdict ['_mask_' ] = property (
328
- fget = lambda _ : mask ,
329
- doc = """Read-only data binary mask"""
330
- )
336
+ classdict ['_mask_' ] = _make_static_ro_property ('mask' , mask )
331
337
332
338
mapping = classdict .pop ('_mapping_' , None )
333
339
@@ -360,18 +366,18 @@ def __new__(mcs, name, bases, classdict):
360
366
ready_mapping = _prepare_mapping (mapping )
361
367
362
368
if ready_mapping :
363
- classdict ['_mapping_' ] = property (
364
- fget = lambda _ : copy . deepcopy ( ready_mapping ) ,
365
- doc = """Read-only mapping structure"""
369
+ classdict ['_mapping_' ] = _make_static_ro_property (
370
+ 'mapping' ,
371
+ copy . deepcopy ( ready_mapping )
366
372
)
367
373
368
374
for m_key in ready_mapping :
369
375
classdict [_py2_str (m_key )] = _make_mapping_property (m_key )
370
376
371
377
else :
372
- classdict ['_mapping_' ] = property (
373
- fget = lambda _ : None ,
374
- doc = """Read-only mapping structure"""
378
+ classdict ['_mapping_' ] = _make_static_ro_property (
379
+ 'mapping' ,
380
+ None
375
381
)
376
382
377
383
classdict ['_cache_' ] = {} # Use for subclasses memorize
@@ -401,11 +407,17 @@ def makecls(mcs, name, mapping=None, mask=None, size=None):
401
407
classdict ['_mapping_' ] = mapping
402
408
return mcs .__new__ (mcs , name , (BinField , ), classdict )
403
409
410
+ @property
411
+ def _value_ (cls ):
412
+ return NotImplemented
413
+
404
414
405
415
BaseBinFieldMeta = BinFieldMeta .__new__ (
406
- BinFieldMeta ,
407
- 'intermediate_class' , (object , ), {'__slots__' : ()}
408
- )
416
+ BinFieldMeta ,
417
+ 'BaseBinFieldMeta' ,
418
+ (object , ),
419
+ {'__slots__' : ()}
420
+ )
409
421
410
422
411
423
# noinspection PyRedeclaration
0 commit comments