tôi cần để mô phỏng sự đếm bằng Python, và đã làm điều đó bằng cách viết các lớp học như:phương pháp __contains__ Overriding cho một lớp
class Spam(Enum):
k = 3
EGGS = 0
HAM = 1
BAKEDBEANS = 2
Bây giờ tôi muốn thử nghiệm nếu một số liên tục là một lựa chọn hợp lệ cho một Enum đặc biệt lớp -derived, với cú pháp sau:
if (x in Foo):
print("seems legit")
Vì vậy, tôi đã cố gắng để tạo ra một "Enum" lớp cơ sở nơi tôi ghi đè lên các phương pháp __contains__
như thế này:
class Enum:
"""
Simulates an enum.
"""
k = 0 # overwrite in subclass with number of constants
@classmethod
def __contains__(cls, x):
"""
Test for valid enum constant x:
x in Enum
"""
return (x in range(cls.k))
Tuy nhiên, khi sử dụng các từ khóa in
trên lớp (như ví dụ trên), tôi nhận được lỗi:
TypeError: argument of type 'type' is not iterable
Tại sao vậy? Tôi có thể bằng cách nào đó có được cú pháp cú pháp tôi muốn không?
Tôi nghĩ rằng một lời nhận xét clarifiying rằng mã sẽ làm việc tốt cho: nếu x in Foo(): in ('có vẻ hợp pháp') Làm cho cả câu hỏi và câu trả lời dễ hiểu hơn. Vì loại (Foo()) là Foo nhưng gõ (Foo) là lớp meta. –