Title: `BUILTINS` is not a valid field name for a frozen dataclass · Issue #96151 · python/cpython · GitHub
Open Graph Title: `BUILTINS` is not a valid field name for a frozen dataclass · Issue #96151 · python/cpython
X Title: `BUILTINS` is not a valid field name for a frozen dataclass · Issue #96151 · python/cpython
Description: This is not a bug that I encountered in the wild, but I happened to notice the possibility for this while reading the source. from dataclasses import dataclass @dataclass(frozen=True) class X: BUILTINS: str X(5) will give you: Traceback ...
Open Graph Description: This is not a bug that I encountered in the wild, but I happened to notice the possibility for this while reading the source. from dataclasses import dataclass @dataclass(frozen=True) class X: BUIL...
X Description: This is not a bug that I encountered in the wild, but I happened to notice the possibility for this while reading the source. from dataclasses import dataclass @dataclass(frozen=True) class X: BUIL...
Opengraph URL: https://github.com/python/cpython/issues/96151
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"`BUILTINS` is not a valid field name for a frozen dataclass","articleBody":"This is not a bug that I encountered in the wild, but I happened to notice the possibility for this while reading the source.\r\n\r\n```\r\nfrom dataclasses import dataclass\r\n@dataclass(frozen=True)\r\nclass X:\r\n BUILTINS: str\r\nX(5)\r\n```\r\n\r\nwill give you:\r\n```\r\nTraceback (most recent call last):\r\n File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\r\n File \"\u003cstring\u003e\", line 3, in __init__\r\nAttributeError: 'int' object has no attribute 'object'\r\n```\r\n\r\nThere are other field names that you can use to trick dataclass into bad behaviour, but all of the other ones are prefixed by an underscore.\r\n\r\nSo one \"fix\" is pretty simple: just rename `BUILTINS` to `_BUILTINS` in dataclasses.py to bring it in line with the others.\r\n\r\nIf a single underscore doesn't feel like sufficient \"this is the user's fault\", we could use `__dataclass_*` (like we do for `__dataclass_self__` param to `__init__`)\r\n\r\nFor what it's worth, the only thing we need `BUILTINS` for is so we can access `object` inside `__init__`, so an alternative fix could be to use `().__class__.__base__` instead of `BUILTINS.object` (and skip the locals dance needed to define `BUILTINS` altogether)\r\n\r\nIf any of that sounds worth doing, I'd be happy to open a PR\n\n\u003c!-- gh-pr-number: gh-98143 --\u003e\n* PR: gh-98143\n\u003c!-- /gh-pr-number --\u003e\n\n\n\u003c!-- gh-pr-number: gh-98899 --\u003e\n* PR: gh-98899\n\u003c!-- /gh-pr-number --\u003e\n\n\n\u003c!-- gh-pr-number: gh-98900 --\u003e\n* PR: gh-98900\n\u003c!-- /gh-pr-number --\u003e\n","author":{"url":"https://github.com/hauntsaninja","@type":"Person","name":"hauntsaninja"},"datePublished":"2022-08-21T07:45:58.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/96151/cpython/issues/96151"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:e0650e9b-9dc5-4747-b734-ea4b2d115ad2 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D426:147A05:FF40FD:15AC836:6A4F0963 |
| html-safe-nonce | 4f427fb0b523304b270d96103634946bebaaffe06150d7330b693cb5ba040880 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENDI2OjE0N0EwNTpGRjQwRkQ6MTVBQzgzNjo2QTRGMDk2MyIsInZpc2l0b3JfaWQiOiIyMjU5MzA4MzA3MzYwNDUwOTE1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 0e49a7c9e46e99bf68d2207a73b2a93969b5c2c9a71f02b80ca06c631753d3d7 |
| hovercard-subject-tag | issue:1345413689 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/96151/issue_layout |
| twitter:image | https://opengraph.githubassets.com/a2901becf2fe471cf76676d7d700611ba350d97c74b0d042e7f95bc23208973b/python/cpython/issues/96151 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/a2901becf2fe471cf76676d7d700611ba350d97c74b0d042e7f95bc23208973b/python/cpython/issues/96151 |
| og:image:alt | This is not a bug that I encountered in the wild, but I happened to notice the possibility for this while reading the source. from dataclasses import dataclass @dataclass(frozen=True) class X: BUIL... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | hauntsaninja |
| hostname | github.com |
| expected-hostname | github.com |
| None | b92d11c0aa4a77d54ef4af1078b6a15fb5a70a215b30c4ecf28889d5a8e656d9 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 2b8f23afb982271f1b22258a94aede67a6b77760 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width