在Python中,您可以通過定義一個(gè)名為__set__
的特殊方法來自定義set
函數(shù)的行為
class CustomSet:
def __init__(self, value):
self._value = value
def __set__(self, instance, value):
print("自定義 set 函數(shù)被調(diào)用")
if isinstance(value, int):
self._value = value
else:
raise ValueError("值必須是整數(shù)")
def __get__(self, instance, owner):
return self._value
class MyClass:
custom_set = CustomSet(0)
# 使用自定義 set 函數(shù)
obj = MyClass()
obj.custom_set = 42 # 輸出:自定義 set 函數(shù)被調(diào)用
print(obj.custom_set) # 輸出:42
try:
obj.custom_set = "not an integer" # 輸出:自定義 set 函數(shù)被調(diào)用
except ValueError as e:
print(e) # 輸出:值必須是整數(shù)
在這個(gè)例子中,我們創(chuàng)建了一個(gè)名為CustomSet
的類,它有一個(gè)__set__
方法。當(dāng)我們嘗試設(shè)置MyClass
實(shí)例的custom_set
屬性時(shí),CustomSet
的__set__
方法會(huì)被調(diào)用。我們還定義了一個(gè)__get__
方法,以便在訪問屬性時(shí)返回正確的值。
請(qǐng)注意,這個(gè)例子僅適用于描述符對(duì)象,而不是常規(guī)的函數(shù)或方法。要了解更多關(guān)于描述符的信息,請(qǐng)參閱Python官方文檔。