Parfois, j'ai besoin de changer le nom d'un attribut de classe Python qui est déjà largement utilisé dans le reste du code.Comment gérer les affectations d'attributs errants python
Le problème est que, pour diverses raisons, certains endroits où l'ancien nom apparaît dans une instruction d'affectation comme class_instance.old_attribute_name = something
peuvent me manquer. Par exemple:
class theClass:
def __init__(self):
self.new_attribute_name = 0
o = theClass()
o.new_attribute_name += 3
if o.new_attribute_name > 3 or o.new_attribute_name < 4:
o.old_attribute_name = 7
do_stuff_with(o.new_attribute_name)
Le problème est que cela peut être difficile à repérer, augmentera pas d'erreur et il suffit de créer un attribut inutile. J'ai envisagé d'utiliser __slot__
, mais j'ai envie de forcer mon état d'esprit C/C++ profond sur Python.
Donc, je voudrais demander, qu'est-ce que je fais mal ici? Que vais-je perdre si j'essaie (en quelque sorte) d'empêcher la création d'attributs en dehors de l'instanciation? Quelle est la manière pythonique de gérer les affectations d'attributs parasites?
Je note que je ferais cela (personnellement, je jetterais une exception plutôt que l'impression) de débogage, afin d'assurer l'ancien code a été traité, puis retirez une fois cela fait. –
Idéalement, vous devriez utiliser "warnings.warn" avec "DeprecationWarning" pour pouvoir contrôler si l'accès à l'ancien nom déclenche une exception ou imprime simplement un avertissement à la sortie standard. – lunaryorn