9
votes

Puis-je avoir deux fonctions init dans une classe Python?

Je porte du code de géolocalisation Java code de http://janmatuschek.de/latuudelongitiveboundingcoordinates#java (indiqué ci-dessous) à Python. Il peut être initialisé à l'aide de deux fonctions (Fromdegrees ou Fromadians). Je pensais que je pouvais faire quelque chose comme xxx

mais cela ne semble pas optimal puisque j'ai défini les valeurs de _Radlat, _radlong, _deglat et _deglong deux fois. Puis-je définir deux fonctions init? Quelle est la meilleure façon de faire ça?

merci xxx


0 commentaires

4 Réponses :


6
votes

Je voudrais simplement inclure un booléen dans votre méthode init. Au lieu d'avoir deux méthodes __ init __ code>, procédez comme suit:

class geoLocation:
    def __init__(self, lat, long, degrees=True):
        if degrees:
            # process as fromDegrees
            (self._radLat, self._radLong, self._degLat, self._degLong) = self.fromDegrees(lat, long)
        else:
            (self._radLat, self._radLong, self._degLat, self._degLong) = self.fromRadians(lat, long)

    def fromDegrees(self, lat, long):
        # some function returning radLat and long and degLat and long in a tuple
    def fromRadians(self, lat, long):
        # same idea but different calculations


0 commentaires

1
votes

Une autre option consiste à avoir aux sous-classes de géolocalisation , dites degreesgeolocation et radiansgeolocation . Maintenant, vous pouvez donner à chacun leur propre fonction init.

Vous stockez maintenant l'emplacement deux fois dans votre classe, une fois que vous utilisez des radians et une fois en utilisant degrés. Cela peut causer des problèmes si vous modifiez accidentellement une représentation, mais oubliez l'autre. Je pense que vous pouvez mieux utiliser une représentation et fournir des getters et des setters qui finissent par faire la conversion à l'autre représentation.


0 commentaires

4
votes

Une option consiste à utiliser les méthodes de classe d'usine: xxx


0 commentaires

19
votes

a choisi une valeur par défaut (radians ou degrés) et coller avec elle. Vous pouvez écrire une classe de classe pour convertir automatiquement à l'autre: xxx


2 commentaires

Je cherchais juste à voir si une méthode de deux __ init __ est possible et je dois plutôt passer une demi-heure d'apprentissage sur décorateurs afin que je puisse comprendre cet extrait de code .. ..


Bienvenue sur Stackoverflow.