在Python中,描述符是一個具有特殊方法的類,這些方法允許它對另一個類的屬性進行控制。描述符的主要方法是__get__()
、__set__()
和__delete__()
。要對描述符進行類型檢查,你可以在__get__()
方法中使用內置的isinstance()
函數來檢查屬性的類型。
下面是一個簡單的示例,展示了如何在描述符中進行類型檢查:
class TypedProperty:
def __init__(self, name, type_):
self.name = name
self.type_ = type_
def __get__(self, instance, owner):
if instance is None:
return self
value = instance.__dict__.get(self.name)
if not isinstance(value, self.type_):
raise TypeError(f"屬性 '{self.name}' 的類型必須是 {self.type__.__name__}")
return value
def __set__(self, instance, value):
if not isinstance(value, self.type_):
raise TypeError(f"屬性 '{self.name}' 的類型必須是 {self.type__.__name__}")
instance.__dict__[self.name] = value
class MyClass:
my_property = TypedProperty("my_property", int)
# 正確的使用方式
obj = MyClass()
obj.my_property = 42 # 正常設置值
print(obj.my_property) # 輸出: 42
# 錯誤的使用方式
obj.my_property = "not an integer" # 拋出 TypeError
在這個示例中,我們創建了一個名為TypedProperty
的描述符類,它接受一個屬性名和一個類型作為參數。在__get__()
和__set__()
方法中,我們使用isinstance()
函數檢查屬性的類型是否與指定的類型相符。如果類型不匹配,我們會拋出一個TypeError
異常。