Issue37868
Created on 2019-08-15 12:02 by Johan Hidding, last changed 2022-04-11 14:59 by admin. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 15325 | merged | eric.smith, 2019-08-18 02:42 | |
| PR 15339 | merged | miss-islington, 2019-08-20 05:40 | |
| PR 15340 | merged | miss-islington, 2019-08-20 05:40 | |
| Messages (7) | |||
|---|---|---|---|
| msg349802 - (view) | Author: Johan Hidding (Johan Hidding) | Date: 2019-08-15 12:02 | |
Given a class `A` that overloads `__getattr__`
```
class A:
def __getattr__(self, key):
return 0
```
An instance of this class is always identified as a dataclass.
```
from dataclasses import is_dataclass
a = A()
print(is_dataclass(a))
```
gives the output `True`.
Possible fix: check for the instance type.
```
is_dataclass(type(a))
```
does give the correct answer.
|
|||
| msg349821 - (view) | Author: Eric V. Smith (eric.smith) * | Date: 2019-08-15 19:48 | |
I'm guessing I'm looking up the attribute on the instance, not the class. |
|||
| msg349822 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2019-08-15 20:04 | |
I am not sure that it is good idea to accept a type and an instance, but if it is a goal, is_dataclass() should be defined as:
def is_dataclass(obj):
cls = obj if isinstance(obj, type) else type(obj)
return hasattr(cls, _FIELDS)
_is_dataclass_instance() should be changed too:
def _is_dataclass_instance(obj):
return hasattr(type(obj), _FIELDS)
|
|||
| msg349832 - (view) | Author: Eric V. Smith (eric.smith) * | Date: 2019-08-15 21:53 | |
Yeah, I agree it's not an awesome design to work with classes or instances, but it's documented that way. As soon as I write some tests I'll check this in. |
|||
| msg349989 - (view) | Author: Eric V. Smith (eric.smith) * | Date: 2019-08-20 05:40 | |
New changeset b0f4dab8735f692bcfedcf0fa9a25e238a554bab by Eric V. Smith in branch 'master': bpo-37868: Improve is_dataclass for instances. (GH-15325) https://github.com/python/cpython/commit/b0f4dab8735f692bcfedcf0fa9a25e238a554bab |
|||
| msg349990 - (view) | Author: miss-islington (miss-islington) | Date: 2019-08-20 05:59 | |
New changeset 1271ee8187df31debda7c556882a51ec356ca534 by Miss Islington (bot) in branch '3.8': bpo-37868: Improve is_dataclass for instances. (GH-15325) https://github.com/python/cpython/commit/1271ee8187df31debda7c556882a51ec356ca534 |
|||
| msg349991 - (view) | Author: miss-islington (miss-islington) | Date: 2019-08-20 06:01 | |
New changeset 02c1457a036c2af3e91beb952afdb66d9c806435 by Miss Islington (bot) in branch '3.7': bpo-37868: Improve is_dataclass for instances. (GH-15325) https://github.com/python/cpython/commit/02c1457a036c2af3e91beb952afdb66d9c806435 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:19 | admin | set | github: 82049 |
| 2019-08-20 06:05:07 | eric.smith | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2019-08-20 06:01:59 | miss-islington | set | messages: + msg349991 |
| 2019-08-20 05:59:30 | miss-islington | set | nosy:
+ miss-islington messages: + msg349990 |
| 2019-08-20 05:40:45 | miss-islington | set | pull_requests: + pull_request15057 |
| 2019-08-20 05:40:39 | miss-islington | set | pull_requests: + pull_request15056 |
| 2019-08-20 05:40:31 | eric.smith | set | messages: + msg349989 |
| 2019-08-18 02:42:16 | eric.smith | set | keywords:
+ patch stage: patch review pull_requests: + pull_request15042 |
| 2019-08-15 21:53:44 | eric.smith | set | messages: + msg349832 |
| 2019-08-15 20:04:31 | serhiy.storchaka | set | nosy:
+ serhiy.storchaka messages: + msg349822 |
| 2019-08-15 19:48:50 | eric.smith | set | messages: + msg349821 |
| 2019-08-15 12:33:32 | eric.smith | set | assignee: eric.smith nosy: + eric.smith |
| 2019-08-15 12:02:15 | Johan Hidding | create | |