Quelle serait la meilleure façon d'initialiser les attributs et de vérifier les paramètres fournis lors de l'initialisation d'une classe python? Supposons qu'il existe plusieurs paramètres dans le __init__()
et que certains d'entre eux doivent se conformer à certaines règles. Il y a aussi le besoin d'avoir des setters et getters pour certains d'entre eux. Je peux penser à l'option ci-dessous. Comment cela vous regarde-t-il? Y a-t-il de meilleures options?Méthode recommandée python init check
Option: Initialise les attributs None
et appelle le setter, où la vérification est effectuée.
class A(object):
def __init__(self, p1=None, ..., pn=None):
self._p1 = None
...
self._pn = None
if p1 is not None:
self.p1 = p1
...
if pn is not None:
self.pn = pn
@p1.setter
def p1(self, p1):
# If p1 is int we can just take it
if isinstance(p1, int):
self._p1 = p1
# If p1 is str we have to obtain it differently
elif isinstance(p1, str):
self._p1 = self._gen_some_p_from_str(p1)
else:
raise Exception('Incorrect p1 type provided.')
...
@pn.setter
def pn(self, pn):
# If pn instance of SomeOtherClass it should be also great
if isinstance(pn, SomeOtherClass):
if pn.great():
self._pn = pn
else:
raise exception('pn not great')
# pn can be also str, and then we should get it
elif isinstance(pn, str):
self._pn = self._get_some_other_p_from_str(pn)
else:
raise Exception('Incorrect pn type provided.')
Débarrassez-vous des chèques. Ecrire la documentation/docstrings appropriée. D'ici c'est la poubelle dans -> garbage out. – timgeb