使用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 对象的属性,就像 set
或 get
一样。对于这种示例,您需要实例数据 - 您可以在 __init__
中对其进行初始化。
Python: Difference between class and instance attributes对差异进行了很好的讨论。
关于python - 创建类时何时使用 __init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553994/