Title: Unnecessary specialization failures of `LOAD_ATTR` and `STORE_ATTR` when attributes are shadowed by the object's class. · Issue #123040 · python/cpython · GitHub
Open Graph Title: Unnecessary specialization failures of `LOAD_ATTR` and `STORE_ATTR` when attributes are shadowed by the object's class. · Issue #123040 · python/cpython
X Title: Unnecessary specialization failures of `LOAD_ATTR` and `STORE_ATTR` when attributes are shadowed by the object's class. · Issue #123040 · python/cpython
Description: This applies to both instances and classes. If an object and it's class both have attributes with the same name, this prevents specialization of access to the object's attribute. However, in this case specialization should only be preven...
Open Graph Description: This applies to both instances and classes. If an object and it's class both have attributes with the same name, this prevents specialization of access to the object's attribute. However, in this c...
X Description: This applies to both instances and classes. If an object and it's class both have attributes with the same name, this prevents specialization of access to the object's attribute. However, i...
Opengraph URL: https://github.com/python/cpython/issues/123040
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Unnecessary specialization failures of `LOAD_ATTR` and `STORE_ATTR` when attributes are shadowed by the object's class.","articleBody":"This applies to both instances and classes.\r\nIf an object and it's class both have attributes with the same name, this prevents specialization of access to the object's attribute.\r\nHowever, in this case specialization should only be prevented if the class's attribute is a data descriptor.\r\n\r\nExample 1, instance:\r\n```Py\r\nclass C:\r\n x = 1\r\n def __init__(self):\r\n self.x = 2\r\n\r\nC().x\r\n```\r\n`C().x` above is `2`. It doesn't matter that `C.x` exists, provided it isn't a data descriptor.\r\nThis failure shows up as \"shadowed\" in the [stats](https://github.com/faster-cpython/benchmarking/blob/main/results/bm-20240814-3.14.0a0-f84754b-PYTHON_UOPS/bm-20240814-azure-x86_64-python-main-3.14.0a0-f84754b-pystats.md#load_attr-1)\r\n\r\nExample 2, class:\r\n```Py\r\nclass Meta(type):\r\n x = 1\r\nclass C(metaclass=Meta):\r\n x = 1\r\n\r\nC.x\r\n```\r\n`C.x` is `2`. `Meta.x` doesn't change that, as it isn't a data descriptor.\r\nThis failure shows up as \"metaclass attribute\" in the [stats](https://github.com/faster-cpython/benchmarking/blob/main/results/bm-20240814-3.14.0a0-f84754b-PYTHON_UOPS/bm-20240814-azure-x86_64-python-main-3.14.0a0-f84754b-pystats.md#load_attr-1)\r\n\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-123219\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/markshannon","@type":"Person","name":"markshannon"},"datePublished":"2024-08-15T16:58:12.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/123040/cpython/issues/123040"}
| 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:cc0311e9-0345-a398-2fee-a4061e68bf89 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | E43C:7B9AE:11D0BEE:1873572:6A4DDF67 |
| html-safe-nonce | 0bc2bf40f1bc658f7eca044d36df0ab71631320b1affe198dc1b810d236e3679 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFNDNDOjdCOUFFOjExRDBCRUU6MTg3MzU3Mjo2QTREREY2NyIsInZpc2l0b3JfaWQiOiI2ODQwOTE1MDg0OTcwOTQyMzExIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 71a30471f9b85751561c9936c74f848d292842701c4ea7934b8a37624bdd9293 |
| hovercard-subject-tag | issue:2468488242 |
| 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/123040/issue_layout |
| twitter:image | https://opengraph.githubassets.com/f9f465aa9c740c994937413109cead63bbb221d95cbc5d81903b99c5aac76423/python/cpython/issues/123040 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/f9f465aa9c740c994937413109cead63bbb221d95cbc5d81903b99c5aac76423/python/cpython/issues/123040 |
| og:image:alt | This applies to both instances and classes. If an object and it's class both have attributes with the same name, this prevents specialization of access to the object's attribute. However, in this c... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | markshannon |
| hostname | github.com |
| expected-hostname | github.com |
| None | 06b8a6144231bf3a234f1c2e9993861e07ce98a905912b114aa386c2d7e84b33 |
| 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 | 1d344bdb7547fe6bca17a59bb2b8aac3dc9532a0 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width