python - 创建类时何时使用 __init__

标签 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()

最佳答案

在类中声明的属性属于类,而不是属于类的各个实例。在您的 site 示例中, url 不再是单个 Site 对象的属性,就像 setget 一样。对于这种示例,您需要实例数据 - 您可以在 __init__ 中对其进行初始化。

Python: Difference between class and instance attributes对差异进行了很好的讨论。

关于python - 创建类时何时使用 __init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553994/

相关文章:

c++ - 使用默认和复制 ctors 进行初始化是否完全等效?

C# StreamWriter ,写入来自不同类的文件?

Python机器错误: importlib.

python - gtk 文本 itters 的问题

Python 类 : method has same name as property

JQuery 类选择器,选择带有 "-"(连字符)的元素

java - 如何在 Android 中使用另一个类中的变量?

python - 内部类使用python。未定义全局名称

python - 识别使用 pip 安装的 python 包的依赖关系

python - 以编程方式将模块/函数集转换为 Python 类