Home > Mobile >  Python dataclass setting default list with values
Python dataclass setting default list with values

Time:10-14

Can anyone help me fix this error. I just started using dataclass I wanted to put a default value so I can easily call from other function

I have this class

@dataclass(frozen=True)
class MyClass:
    my_list: list = ["list1", "list2", "list3"]
    my_list2: list = ["list1", "list2", "list3"]

But when i print print(MyClass.my_list) I'm getting this error

 raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'list'> for field my_list is not allowed: use default_factory

CodePudding user response:

What it means by mutable default is that the lists provided as defaults will be the same individual objects in each instance of the dataclass. This would be confusing because mutating the list in an instance by e.g. appending to it would also append to the list in every other instance.

Instead, it wants you to provide a default_factory function that will make a new list for each instance:

from dataclasses import dataclass, field

@dataclass(frozen=True)
class MyClass:
    my_list: list = field(default_factory=lambda: ["list1", "list2", "list3"])
    my_list2: list = field(default_factory=lambda: ["list1", "list2", "list3"])
  • Related