> On 9 Aug 2021, at 19:28, Lukas Lösche <lukas@some.engineering> wrote: > > I'm on Python 3.9.6 and trying to make sense of the following behaviour: > >>>> from dataclasses import dataclass, fields >>>> @dataclass > ... class Foobar: > ... name: str > ... >>>> fields(Foobar)[0].type > <class 'str'> >>>> type(fields(Foobar)[0].type) > <class 'type'> > > > >>>> from __future__ import annotations >>>> from dataclasses import dataclass, fields >>>> >>>> @dataclass > ... class Foobar: > ... name: str > ... >>>> fields(Foobar)[0].type > 'str' >>>> type(fields(Foobar)[0].type) > <class 'str'> > > I have a validation function that checks if the types of all fields in > a dataclass are what they are supposed to be. But as soon as I import > annotations from __future__ this validation breaks as the arg that I'm > passing to isinstance() is no longer a type class but a string. > > What am I doing wrong?
Nothing. As I understand the current situation you have to check if it’s a string and convert to the object you need at the moment. Hopefully someone with a deeper understanding will explain how you do this. I would guess use eval. This is a known problem and there are core devs that are working on improvements. But it will be at leas python 3.11 before there is a possible improvement. Barry > > Thanks, > -- Lukas > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list