code: def weather(self, latitude=None, longitude=None, date=None):
          # type:(float, float, datetime) -> Weather
          
  
          # If params are default(None) check if latitude/longitude have already been defined(Not None)
          # Otherwise TypeError is raised
          if latitude is None:
              if self.latitude is None:
                  raise TypeError("latitude must be type '<class 'str'>' is None")
          else:
              self.latitude = latitude
  
          if longitude is None:
              if self.longitude is None:
                  raise TypeError("longitude must be type '<class 'str'>' is None")
          else:
              self.longitude = longitude
  
          self._date = date
  
          url = self.url
  
          log.debug(url)
  
          self._response = requests.get(url, headers={"Accept-Encoding": "gzip"}, timeout=5)
          self._response.raise_for_status()
  
          self._weather = Weather(self._response.text)
          return self._weather
docs: :param float latitude: Locations latitude
          :param float longitude: Locations longitude
          :param datetime or str or int date: Date/time for historical weather data
  
          :raises requests.exceptions.HTTPError: Raises on bad http response
          :raises TypeError: Raises on invalid param types
  
          :rtype: Weather
  
          Example uses
  
          .. code-block:: python
  
              # DarkSky instantiation
              >>> darksky = pydarksky.DarkSky(api_key)
  
              # Pre-define values
              >>> darksky.latitude = -34.9285
              >>> darksky.longitude = 138.6005
              >>> weather = darksky.weather()
  
              # Pass values as params
              >>> weather = darksky.weather(latitude=-34.9285, longitude=138.6005)
  
              # Pass values from dict
              >>> kwargs = {"longitude": 138.6005, "latitude": -34.9285}
              >>> weather = darksky.weather(**kwargs)