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"])