Heim > Backend-Entwicklung > Python-Tutorial > Detaillierte Einführung in Attributdeskriptoren in Python (Codebeispiel)

Detaillierte Einführung in Attributdeskriptoren in Python (Codebeispiel)

不言
Freigeben: 2018-12-12 10:37:11
nach vorne
2867 Leute haben es durchsucht

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()
Nach dem Login kopieren

__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    #正确执行,不报错
Nach dem Login kopieren

ä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属性
Nach dem Login kopieren

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__)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage