Hãy nói rằng tôi có một Bộ đồ lớp và bốn lớp phù hợp: Trái tim, Spade, Kim cương, Câu lạc bộ.
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
Tôi có một phương thức nhận một bộ quần áo làm tham số, đó là một đối tượng lớp, không phải là một thể hiện. Chính xác hơn, nó chỉ có thể nhận được một trong bốn giá trị: Heart, Spade, Diamond, Club. Làm thế nào tôi có thể đưa ra một khẳng định đảm bảo một điều như vậy? Cái gì đó như:
def my_method(suit):
assert(suit subclass of Suit)
...
Tôi đang sử dụng Python 3.
_class
, làm cho chúng thích suit_class
. Tôi đã đề xuất một quy ước đặt tên như vậy trong một câu hỏi có liên quan .
my_method(Heart)
my_method(Spade)
...
inspect.isclass
hoặc chỉ đơn giản là sử dụng isinstance(myvar, type)
trong Python 3, vì issubclass
sẽ gây ra lỗi nếu nó vượt qua một lớp không. Xem câu trả lời này . Tôi đã nhận xét về câu trả lời dưới đây, nhưng nó sẽ không bao giờ nhìn thấy ánh sáng trong ngày.
my_method
có thể có thể nhận làm tham số là gì: "nó chỉ có thể nhận được một trong bốn giá trị: Heart, Spade, Diamond, Club". Các giá trị này là các đối tượng lớp, không phải là các thể hiện của lớp. Nó có vẻ khá rõ ràng đối với tôi, mặc dù tôi cho rằng bạn đúng về sự mơ hồ bởi vì các câu trả lời bao gồm cả hai khả năng. Bạn rất sẵn lòng chỉnh sửa câu hỏi nếu bạn có một câu nói rõ ràng hơn cho nó. Cảm ơn các bình luận.