首页 > 解决方案 > 以下 3 种方式在构造函数中声明属性有什么区别?

问题描述

def __init__(self):
    self.score=[]

def __init__(self,score=[]):
    self.score=score

def __init__(self,score):
    self.score=[]

你能解释一下幕后发生的事情吗?TIA。

标签: pythonpython-3.xconstructorattributes

解决方案


def init(self):
    self.score=[]

self.score总是初始化为一个空列表。

def init(self,score=[]):
    self.score=score

调用者可以传入一个可选的列表参数。如果没有,self.score则在定义函数时将其初始化为一个空列表。(请参阅常见问题:可变默认参数了解为什么这是一个坏主意。)

def init(self,score):
    self.score=[]

调用者必须传入一个列表参数(通常,该参数将被分配给self.score,但您将该值丢弃并设置self.score为一个空列表)。第三个例子可能应该是:

def init(self, score):
    self.score = score

推荐阅读