This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author barry
Recipients barry, eric.smith, gvanrossum, ned.deily
Date 2018-05-16.20:35:04
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <FBD4B3F4-7990-41D6-9E1C-A86BC8E13628@python.org>
In-reply-to <1526501361.94.0.682650639539.issue33539@psf.upfronthosting.co.za>
Content
On May 16, 2018, at 16:09, Eric V. Smith <report@bugs.python.org> wrote:
> 
> I think the concern is:
> 
> from dataclasses import *
> 
> class B:
>    def __init__(self, a, b, c):
>        # do something with a, b, c, and maybe use fields(self) to figure out we have a "i" field
>        self.i = a + b + c
> 
> @dataclass(init=False)
> class C(B)
>    i: int
> 
> c = C(1, 2, 3)
> 
> It doesn't seem particularly likely, but do we want to prevent it?

What are the intended semantics of this?  I know what happens; c.i == 6

So, if I remove `init=False` and add an explicit __init__(), the same thing still happens.  Is that good enough?

from dataclasses import *

class B:
   def __init__(self, a, b, c):
       # do something with a, b, c, and maybe use fields(self) to figure out we
       # have a "i" field
       self.i = a + b + c

@dataclass
class C(B):
   i: int

   def __init__(self, a, b, c):
       super().__init__(a, b, c)

c = C(1, 2, 3)

(Or maybe it’s the “use fields(self)” bit that you’re pointing out?)
History
Date User Action Args
2018-05-16 20:35:04barrysetrecipients: + barry, gvanrossum, eric.smith, ned.deily
2018-05-16 20:35:04barrylinkissue33539 messages
2018-05-16 20:35:04barrycreate