Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python dataclass setting default list with values

Tags:

python

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
like image 227
mark12345 Avatar asked Mar 05 '26 16:03

mark12345


1 Answers

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
class MyClass:
    my_list: list = field(default_factory=lambda: ["list1", "list2", "list3"])
    my_list2: list = field(default_factory=lambda: ["list1", "list2", "list3"])
like image 50
Evan Summers Avatar answered Mar 07 '26 07:03

Evan Summers