何时在创建类时使用__init__

Cri*_*spy 2 python class

在使用Django一段时间之后,我习惯在没有def __init__(self): ...声明变量的情况下使用类.我曾经在__init__函数中声明我的变量,我现在意识到有些情况下不需要,我只是不清楚何时使用它.在尝试将类传递给变量时似乎存在问题,我应该在这些情况下使用init吗?

我知道我可以__init__用于所有情况,但它只是使我的短课程更像没有它的清洁,所以我想知道我什么时候可以使用它.

例:

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()
Run Code Online (Sandbox Code Playgroud)

Pet*_*per 5

在类中声明的属性由类拥有,而不是由类的单个实例拥有.在您的site例子,url是不是没有更多的个人网站的属性对象set或者get是.对于这种示例,您需要实例数据 - 您可以初始化它__init__.

Python:类和实例属性之间的差异很好地讨论了这些差异.