cuốn sách gpt4 ai đã làm

Python enum.Enum tạo bí danh thay vì giá trị mới

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 15:44:11 26 4
mua khóa gpt4 Nike

Tôi vừa nhận thấy một hành vi rất lạ của Enum+defaultdict trong pyhton. Tôi đã định nghĩa một bảng liệt kê như thế này để thu thập một số từ điển mặc định:

từ nhập enum Enum
từ bộ sưu tập nhập defaultdict

lớp A (Enum):
a = defaultdict(lambda: 1)
b = defaultdict(lambda: 2)

Sau đó, khi tôi nhìn vào nội dung của A:

Trong [11]: Aa
Ra[11]: at 0x7f773f03b510>, {})>

Trong [12]: Ab
Ra[12]: at 0x7f773f03b510>, {})>

所以 Ab 只是 Aa bí danh. Đối với tôi, điều này có vẻ như là một sai lầm, mặc dù có thể có một số lý do chính đáng đằng sau nó. Có ý tưởng gì không?

phụ lục

Vì nó xuất hiện trong phần bình luận, hãy lưu ý lý do tại sao bạn đưa lệnh vào enum. Tôi thấy việc nhóm các hằng số vào các không gian tên thường hữu ích để mọi người có thể truy cập Aaconstant1,Không đổi1 Tương đương. Hiện tại, cố gắng làm như vậy bằng cách sử dụng Enums sẽ gây ra Lỗi thuộc tính. Tất nhiên, bạn có thể làm điều này:

lớp A:
lớp a(Enum):
hằng số1 = 1
lớp b (Enum):
hằng số1 = 2

Tuy nhiên, điều này không tận dụng được chức năng của Enum (lặp, truyền __getitem__ thăm, v.v.).

câu trả lời hay nhất

Nếu bạn gán giá trị bằng nhau cho hai thành viên liệt kê,liệt kê sẽ tạo ra một thành viên liệt kê có hai bí danh, thay vì hai thành viên riêng biệt.

Defaultdicts kế thừa từ mệnh lệnh so sánh bình đẳng Điều này có nghĩa là nhà máy mặc định không == một phần của sự so sánh Các thành viên enum của bạn có cùng giá trị nên chúng được hợp nhất.

Nói chung, không nên sử dụng các đối tượng có thể thay đổi làm giá trị liệt kê. họ có xu hướng phá vỡ liệt kê Các giả định thiết kế như "sự bình đẳng về giá trị không thay đổi". Hãy cân nhắc việc đính kèm các lệnh mặc định này vào các thành viên liệt kê của bạn theo những cách khác.

Về việc Python enum.Enum tạo bí danh thay vì giá trị mới, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/51038034/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress