Browse Source

ImmutableAttr,ListItemAttr: minor cleanups

The MMGen Project 4 years ago
parent
commit
be6a7ef2f5
1 changed files with 21 additions and 22 deletions
  1. 21 22
      mmgen/obj.py

+ 21 - 22
mmgen/obj.py

@@ -223,10 +223,11 @@ class Int(int,Hilite,InitErrors):
 	def colorize(cls,n,color=True):
 		return super().colorize(repr(n),color=color)
 
-# For attrs that are always present in the data instance
-# Reassignment and deletion forbidden
-class ImmutableAttr(object): # Descriptor
-
+class ImmutableAttr: # Descriptor
+	"""
+	For attributes that are always present in the data instance
+	Reassignment and deletion forbidden
+	"""
 	ok_dtypes = (str,type,type(None),type(lambda:0))
 
 	def __init__(self,dtype,typeconv=True,set_none_ok=False):
@@ -241,14 +242,13 @@ class ImmutableAttr(object): # Descriptor
 	def __get__(self,instance,owner):
 		return instance.__dict__[self.name]
 
-	# forbid all reassignment
-	def set_attr_ok(self,instance):
+	def setattr_condition(self,instance):
+		'forbid all reassignment'
 		return not self.name in instance.__dict__
 
 	def __set__(self,instance,value):
-		if not self.set_attr_ok(instance):
-			m = "Attribute '{}' of {} instance cannot be reassigned"
-			raise AttributeError(m.format(self.name,type(instance)))
+		if not self.setattr_condition(instance):
+			raise AttributeError('Attribute {self.name!r} of {type(instance)} instance cannot be reassigned')
 		if self.set_none_ok and value == None:
 			instance.__dict__[self.name] = None
 		elif self.typeconv:   # convert type
@@ -260,28 +260,27 @@ class ImmutableAttr(object): # Descriptor
 			elif callable(self.dtype) and type(value) == self.dtype():
 				instance.__dict__[self.name] = value
 			else:
-				m = "Attribute '{}' of {} instance must of type {}"
-				raise TypeError(m.format(self.name,type(instance),self.dtype))
+				raise TypeError('Attribute {self.name!r} of {type(instance)} instance must of type {self.dtype}')
 
 	def __delete__(self,instance):
-		m = "Atribute '{}' of {} instance cannot be deleted"
-		raise AttributeError(m.format(self.name,type(instance)))
-
-# For attrs that might not be present in the data instance
-# Reassignment or deletion allowed if specified
-class ListItemAttr(ImmutableAttr): # Descriptor
+		raise AttributeError('Attribute {self.name!r} of {type(instance)} instance cannot be deleted')
 
+class ListItemAttr(ImmutableAttr):
+	"""
+	For attributes that might not be present in the data instance
+	Reassignment or deletion allowed if specified
+	"""
 	def __init__(self,dtype,typeconv=True,reassign_ok=False,delete_ok=False):
 		self.reassign_ok = reassign_ok
 		self.delete_ok = delete_ok
 		ImmutableAttr.__init__(self,dtype,typeconv=typeconv)
 
-	# return None if attribute doesn't exist
 	def __get__(self,instance,owner):
+		"return None if attribute doesn't exist"
 		try: return instance.__dict__[self.name]
 		except: return None
 
-	def set_attr_ok(self,instance):
+	def setattr_condition(self,instance):
 		return getattr(instance,self.name) == None or self.reassign_ok
 
 	def __delete__(self,instance):
@@ -313,9 +312,9 @@ class MMGenListItem(MMGenObject):
 		if args:
 			raise ValueError('Non-keyword args not allowed in {!r} constructor'.format(type(self).__name__))
 
-		for k in kwargs:
-			if kwargs[k] != None:
-				setattr(self,k,kwargs[k])
+		for k,v in kwargs.items():
+			if v != None:
+				setattr(self,k,v)
 
 		# Require all immutables to be initialized.  Check performed only when testing.
 		self.immutable_attr_init_check()