Thomas <thomas.d.mc...@gmail.com> added the comment:

Thinking a little more about this, maybe a different solution would be to have 
default values be installed at the class level by default without being 
overwritten in the init, as is the case today. default_factory should keep 
being set in the init as is the case today.

With this approach:

@dataclass
class Foo:
    bar = field(default=4)
    # assigns 4 to Foo.bar but not to foo.bar (bonus: __init__ will be faster)

    bar = field(default=some_descriptor)
    # assigns some_descriptor to Foo.bar, so Foo().bar does a __get__ on the 
descriptor

    bar = field(default_factory=SomeDescriptor)
    # assigns a new SomeDescriptor instance to every instance of Foo

    bar = field(default_factory=lambda: some_descriptor)
    # assigns the same descriptor object to every instance of Foo

I don't think this change would break a lot of existing code as the attribute 
overwrite that happens at the instance level in the __init__ is essentially an 
implementation detail. It also seems this would solve the current problem and 
allow for a cleaner way to assign a descriptor object as a default value. Am I 
not seeing some obvious problem here ?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39247>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to