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 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? P> merci p>
4 Réponses :
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
Une autre option consiste à avoir aux sous-classes de 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. P> géolocalisation code>, dites
degreesgeolocation code> et
radiansgeolocation code>. Maintenant, vous pouvez donner à chacun leur propre fonction init. P>
Une option consiste à utiliser les méthodes de classe d'usine:
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:
Je cherchais juste à voir si une méthode de deux __ init __ code> est possible et je dois plutôt passer une demi-heure d'apprentissage sur décorateurs i> afin que je puisse comprendre cet extrait de code .. ..
Bienvenue sur Stackoverflow.