-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How would you provide a no-argument called to manufacture default values #1
Comments
Thanks for the question. As you pointed out, mutable defaults are copied, so for example I couldn't think of a use case this alternative mechanism wouldn't cover. Do you have one in mind? |
What if I have a field that will contain instances of How would I specify this? |
If you define a |
I suppose this naturally raises the question of whether this is ideal. My thinking, as implied earlier, is that in the clear majority of cases where a default value can't be shared between instances it is for the reason that it is mutable, so copying it will suffice. In the case of collections, this is a clear advantage (imo) since it reduces the repetitiveness of lambdas. This would definitely be a disadvantage if you commonly wanted to create class instances, particularly if you wanted to create instances of classes you don't control. Another option to the above solution would be to use post-initialisation logic: @dataclass
class Example:
mcc: MyCustomClass = None
def __init__(self, mcc=None):
self.mcc = MyCustomClass() This has the major advantage of flexibility - you can do logic as complex as you like in there, including initialising I admit that this is still not as "nice" as dataclasses' |
As of 03cebc9 this is now possible with @dataclass
class Example:
mcc: MyCustomClass = None
def __init__(self):
self.mcc = MyCustomClass() and an example has been added to the README to document this. |
For future readers, as of release v0.9, this is now possible: @dataclass
class Example:
mcc: MyCustomClass = factory(MyCustomClass) |
In the docs, it stats that a copy is made of data items provided as defaults. But in core dataclasses, you can also supply a
default_factory
. How would you do this in dataclassy?The text was updated successfully, but these errors were encountered: