Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Einführung in Attributdeskriptoren in Python (Codebeispiel)
Dieser Artikel bietet Ihnen eine detaillierte Einführung (Codebeispiel) über Attributdeskriptoren in Python. Ich hoffe, dass er für Freunde hilfreich ist.
Als Anfänger lese ich ständig Dinge und lerne jeden Tag Wissen. Heute werde ich Ihnen eine gute Sache vorstellen – Attributdeskriptor
Was ist ein Attributdeskriptor?
Tatsächlich ist jede in einer Klasse implementierte magische Funktion unter set__, __get__, __delete ein Attributdeskriptor.
Als nächstes definieren wir einen Attributdeskriptor:
class IntegerField: def __get__(self, instance, owner): pass def __set__(self, instance, value): pass def __delete__(self, instance): pass class User: high= IntField()
__get__: Wenn wir dieses Attribut mit einer Klasse oder Instanz aufrufen, wird das Ergebnis der Funktion __get__ zurückgegeben.
__set__: Python ruft diese Funktion auf, wenn wir Instanz verwenden, um den Attributwert festzulegen. Es gibt keine Einschränkungen für den Unterricht.
__delete__: Python ruft diese Funktion auf, wenn wir versuchen, das Attribut mithilfe einer Instanz zu löschen. Es gibt keine Einschränkungen für den Unterricht.
Wie benutzt man dieses Ding? Als Nächstes werde ich den obigen Code für alle
class IntegerField: def __get__(self, instance, owner): return self.value def __set__(self, instance, value): if not isinstance(value,numbers.Integral): raise ValueError("请输入一个整数") self.value=value def __delete__(self, instance): pass class User: high=IntegerField() #验证代码 if __name__ == '__main__': user=User() user.high='175' #报错,ValueError:请输入一个整数 User.high=175 #正确执行,不报错
ändern, sodass wir Attributdeskriptoren verwenden können, um den Attributen eine bestimmte Logik zuzuordnen.
Tatsächlich ist es unter dem Attributdeskriptor auch unterteilt in
1 Datendeskriptor: implementiert __set__, __get__
if __name__ == '__main__': user=User() user.high=175 print(user.__dict__) #high是不放入__dict__中的,优先查找数据描述符中的值 user.__dict__["high"]="abc" #这样赋值时可以的,并且可以放入__dict__中 print(user.high) #会报错,因为在调用__get__方法时并没有value属性
2. Nicht-Daten: implementiert __get__, implementiert aber nicht __set__
class NonField: def __init__(self, high=170): self.value = high def __get__(self, instance, owner): return self.value class User: high = NonField() if __name__ == '__main__': user = User() user.high = '175' #会放入user.__dict__中 print(user.__dict__)
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Attributdeskriptoren in Python (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!