Comments (2)
To get the types we must call typing.get_type_hints
and passing the class. This returns a mapping that can be used to retrieve the type by passing field.name
. For example:
$ python
Python 3.7.1 (default, Jan 1 2019, 15:19:53)
[GCC 5.5.0 20171010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import annotations
>>> from dataclasses import dataclass, fields
>>> import typing
>>> @dataclass
... class C:
... i: int
...
>>> fields(C)
(Field(name='i',type='int',default=<dataclasses._MISSING_TYPE object at 0x7f62e8594780>,default_factory=<dataclasses._MISSING_TYPE object at 0x7f62e8594780>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD),)
>>> fields(C)[0].type
'int'
>>> fields(C)[0].name
'i'
>>> typing.get_type_hints(C)
{'i': <class 'int'>}
>>> typing.get_type_hints(C)[fields(C)[0].name]
<class 'int'>
The only caveat with this approach is that for classes that use forward references (with the class name itself) the typing.get_type_hints
will raise a NameError
if called before the class has been actually initialized in its module (such as directly in a decorator).
from dataclasses-json.
Hi, yes, I am aware of this issue and it is being tracked in #31, specifically #5. Thanks for reporting.
My instinct is there isn't a good way to address this (as described in #5) without improvements to the typing
API, but let me know if you have suggestions.
from dataclasses-json.
Related Issues (20)
- [BUG] Nested tuple with union of tuple does not deserialize correctly HOT 7
- [BUG] Nullable fields are not showing up when deserializing with field(default=None, metadata=config(exclude=lambda x: x is None)) HOT 4
- [BUG] Generic Collections fields - not respecting `default_factory` `field` specifications
- [BUG] new key "dataclass_json_config": null HOT 1
- AttributeError: 'list' object has no attribute 'keys' HOT 3
- [BUG] Decoding incompatible with Freezegun
- AttributeError: 'list' object has no attribute 'items' HOT 1
- [BUG] encoders / decoders don't apply to list / dict of the class
- [BUG] Getting `UserWarning` for defining an attribute with type `dict[str, bytes] | None`
- decoding optional decimal fields
- Parse JSON without modifying the dataclass HOT 1
- [BUG] SNAKE LetterCase conversion adding extra underscores for numeric parts HOT 1
- [BUG] SNAKE LetterCase conversion adding extra underscores for numeric parts
- [BUG] decorator @validates_schema not working when schema loads
- [FEATURE] Raise ValidationError if JSON doesn't match any of the types in Union
- [BUG] dataclass with generic dataclass field is not loaded correctly HOT 3
- [FEATURE] Flag for skipping private fields in export HOT 1
- [BUG] Documentation is misleading.
- [BUG] TypeError: cannot pickle '..' - despite being excluded
- [BUG] Importing types in `TYPE_CHECKING` causes `NameError`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dataclasses-json.