After using Django for a while, I got use to using classes without def __init__(self): ... when declaring variables. I used to declare my variables in the __init__ function, I now realize that there are cases where don't need to, I'm just unclear on when to use it or not. It seems there is a problem when trying to pass a class to a variable, should I use init in these cases?
I know I could just use __init__ for all cases, but it just makes my short classes like cleaner without it, so I would like to know when I can and cannot use it.
example:
class BaseScraper(object):
    # whithout __init__, passing Site() to site wont work.
    # site = Site()
    # parser = None
    def __init__(self):
        self.site = Site()
        self.parser = None 
class Site(object):
    # no trouble declaring url as a str
    url = ""
    def set(self, url):
        self.url = url
    def get(self):
        return self.url
if __name__ == "__main__":
    scraper = BaseScraper()
    scraper.site.set('http://www.google.com')   
    print scraper.site.get()
 
     
     
    