Python对象类可变的默认值

时间:2020-03-25 17:13:43

标签: python

假设我们有一个简单的python模型类。

 class Library:

     def __init__():
         self.library_name = None
         self.books = []

我们将通过以下方式使用它:

new_library = Library()
new_library.library_name = "Delhi International Library"

这将是一个没有书的空图书馆。这样安全吗?我知道您不应该在方法签名中使用可变类型,因为它是在评估时。

2 个答案:

答案 0 :(得分:4)

使用可变类型作为默认值的惯用方式是使用None默认值:

class Library:
     def __init__(self, name, books=None):
         self.library_name = name
         self.books = [] if books is None else books


new_library = Library("Delhi International Library")

这里name是必需的参数,因为恕我直言,一个库应该有一个名称,但是如果以后您将不得不创建一个没有参数的库,那么您也可以使用默认值。

books是可选的。如果未提供,则将获得一个空库,并且如果您第一次使用它,它将不会成为默认库,因为None不可更改...

答案 1 :(得分:1)

您可以使用:

class Library:
    def __init__(self, library_name, books=None):
        self.library_name = library_name
        self.books = books or []

然后实例化为:

new_library = Library("Delhi International Library")