Initialization order of fields overridden in subclasses
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Start by reproducing the provided attrs example and reading the subclassing discussion in related issue #637, alongside the referenced dataclasses inheritance behavior in PEP 557. The issue does not name implementation files or tests; completion would require maintainer agreement on the intended initialization semantics and a verified resolution for the failing BetterXContainer case.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I have a code similar to the following, that relies very heavily on mypy for correctness:
import attr
class X:
""" Some other class from the code """
class XButBetter(X):
""" Some other class from the code """
@attr.s(auto_attribs=True)
class XContainer:
the_x: X
x_metadata: int = attr.ib(init=False)
@x_metadata.default
def _x_metadata_default(self) -> int:
return self.the_x.get_metadata()
def some_useful_function(self) -> str:
""" A useful but very complex function dealing with self.the_x """
@attr.s(auto_attribs=True)
class BetterXContainer(XContainer):
the_x: XButBetter
def some_function(self) -> None:
""" some code assuming the_x is the better version """
xc = XContainer(X())
xcb = BetterXContainer(XButBetter())
The last line fails with AttributeError: 'BetterXContainer' object has no attribute 'the_x', because the initialization order of the attributes changed in the subclass. Another similar issue is described on stackoverflow.
Any plans on implementing subclassing similarly to dataclasses? Would that be a breaking API change? (Probably.)
Related attrs issue I found: #637
PS.: I realize this is subclassing issue n+1 when subclassing is frowned upon, and this is somewhat similar to the classic OOP problem of subclassing Circle from Ellipse, so feel free to just say "damn man, this is not proper OOP, so wontfix".
- Ngôn ngữ chính
- Python
- Star
- 5.8k
- Fork
- 480
- Merge trung bình
- 2 giờ 15 phút
- Pull request đã merge (30 ngày)
- 2
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python-attrs/attrs
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
python-attrs/attrs#1620 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
python-attrs/attrs#1596 · 2 bình luận · 1 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
python-attrs/attrs#1549 · 3 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 38/100
python-attrs/attrs#1543 · 2 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
python-attrs/attrs#1532 ·
Tất cả issue của python-attrs/attrs
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
stephrobert/dsoxlab#238 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
sublimehq/package_control#1780 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
nwg-piotr/nwg-displays#145 ·