Tôi vừa phát hiện ra sự tồn tại của một lớp cơ sở Enum trong python và tôi đang cố gắng tưởng tượng nó có thể hữu ích cho tôi như thế nào.Làm thế nào để so sánh một chuỗi với một python enum?
Hãy nói rằng tôi xác định một tình trạng đèn giao thông:
from enum import Enum, auto
class Signal(Enum):
red = auto()
green = auto()
orange = auto()
Hãy nói rằng tôi nhận được thông tin từ một số hệ thống phụ trong chương trình của tôi, dưới hình thức của một chuỗi đại diện cho một tên màu, ví dụ brain_detected_colour = "red"
.
Làm cách nào để so sánh chuỗi này với tín hiệu đèn giao thông của tôi?
Rõ ràng, brain_detected_colour is Signal.red
là False
, vì Signal.red
không phải là một chuỗi.
Signal(brain_detected_colour) is Signal.red
không thành công với ValueError: 'red' is not a valid Signal
.
Sử dụng 'is' trong' brain_detected_colour là Signal.red.name' là nguy hiểm; tốt hơn nên sử dụng '=='. – mwchase
@mwchase Bạn có thể giải thích tại sao, để tôi có thể chỉnh sửa câu trả lời của mình và thêm giải thích? – bli
Bạn đang dựa vào chuỗi thực tập, chi tiết thực hiện không rõ ràng http://guilload.com/python-string-interning/, không bao giờ sử dụng 'is' trừ khi bạn thực sự cần phải so sánh danh tính của các đối tượng –