<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_drops(self, dropin):
 """Load `drops` from the given dropin. Args: dropin (string):
 path of a dropin, e.g. dropin.auth Returns: An iterable contains the drops object in the given dropin This method load drops object by some sort of convension. For example, assuming we want to load drops type `models` from dropin `dropin.articls`. The drops are discoveried with the following sequence:: import dropin.articles drops = dropin.articles.models if anything goes wrong, next try is :: import dropin.articles.models as drops if the current drops object has attribute **__drops__** :: drops = drops.__drops__ if the current drops object is a callable :: drops = drops() if not drops was found, an empty list is returned. """

        obj = load_object(dropin)
        try:
            drops = getattr(obj, self.drops_type)
        except AttributeError:
            try:
                drops = load_object('%s.%s' % (dropin, self.drops_type))
            except ImportError:
                drops = None
        if hasattr(drops, '__drops__'):
            drops = drops.__drops__
        if callable(drops):
            drops = drops(self.app)
        return drops or []