摘要:解答三個問題,描述是什么如何實現(xiàn)使用場景一什么是描述符描述符就是一個具有綁定行為的對象屬性,其屬性訪問將由描述符協(xié)議中的方法覆蓋。如果這些方法中的任何一個針對某個對象定義,那么它就被認為是一個描述符。
解答三個問題,描述是什么?如何實現(xiàn)?使用場景?
一、什么是描述符描述符就是一個具有綁定行為的對象屬性,其屬性訪問將由描述符協(xié)議中的方法覆蓋。這些方法為 __get__、__set__ 和 __delete__。如果這些方法中的任何一個針對某個對象定義,那么它就被認為是一個描述符。
__get__ 用于訪問屬性。它返回屬性的值,或者在所請求的屬性不存在的情況下出現(xiàn) AttributeError 異常
__set__ 將在屬性分配操作中調(diào)用。不會返回任何內(nèi)容
__delete__ 控制刪除操作。不會返回內(nèi)容
二、描述符的實現(xiàn)方式 2.1 基于類創(chuàng)建#!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "liao gao xiang" class Descriptor(object): """""" def __init__(self): self._name = "" def __get__(self, instance, owner): print("__get__") return self._name def __set__(self, instance, value): print("__set__") self._name = value def __delete__(self, instance): print("__delete__") del self._name class Person(object): name = Descriptor() p = Person() print(p.name) p.name = "liao gao xiang" del p.name # print(p.name)2.2 使用propety()函數(shù)
#!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "liao gao xiang" class Person(object): def __init__(self): self._name = "" def fget(self): print("Getting: %s" % self._name) return self._name def fset(self, value): print("Setting: %s" % value) self._name = value.title() def fdel(self): print("Deleting: %s" % self._name) del self._name name = property(fget, fset, fdel, "I"m the property.") p = Person() print(p.name) p.name = "liao gao xiang" del p.name # print(p.name)2.3 使用@property裝飾器
#!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "liao gao xiang" class Person(object): """""" def __init__(self, name): self._name = name @property def name(self): print("get_name") return self._name @name.setter def name(self, value): print("set_name") self._name = value @name.deleter def name(self): print("del_name") del self._name p = Person() print(p.name) p.name = "liao gao xiang" del p.name # print(p.name)三、描述符的使用場景
通過結(jié)合使用描述符,可以實現(xiàn)優(yōu)雅的編程,允許創(chuàng)建 Setters 和 Getters 以及只讀屬性
根據(jù)值或類型請求進行屬性驗證
大量用于各種框架中,比如Django的models
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19864.html
摘要:下面我們用描述符來實現(xiàn)中的動態(tài)屬性和特性中提及的訂單結(jié)算代碼第四版使用描述符實現(xiàn)訂單結(jié)算功能描述符基于協(xié)議實現(xiàn),無需創(chuàng)建子類。特性是覆蓋型描述符。非覆蓋型描述符沒有實現(xiàn)方法的描述符屬于非覆蓋型描述符。類中定義的方法是非覆蓋型描述符。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之元編程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點: 1、了解描述符...
摘要:之所以是這樣是因為當(dāng)訪問一個實例描述符對象時,會將轉(zhuǎn)換為。而類的字典中則有描述符對象。這主要就是因為描述符優(yōu)先。此外,非數(shù)據(jù)描述符的優(yōu)先級低于實例屬性。參考以上就是本人對描述符的一些理解,有什么不正確的地方還請不吝指出,謝謝 什么是描述符 python描述符是一個綁定行為的對象屬性,在描述符協(xié)議中,它可以通過方法重寫屬性的訪問。這些方法有 __get__(), __set__(), 和...
摘要:解答三個問題,描述是什么如何實現(xiàn)使用場景一什么是描述符描述符就是一個具有綁定行為的對象屬性,其屬性訪問將由描述符協(xié)議中的方法覆蓋。如果這些方法中的任何一個針對某個對象定義,那么它就被認為是一個描述符。 解答三個問題,描述是什么?如何實現(xiàn)?使用場景? 一、什么是描述符 描述符就是一個具有綁定行為的對象屬性,其屬性訪問將由描述符協(xié)議中的方法覆蓋。這些方法為 __get__、__set__ ...
閱讀 3909·2021-11-17 09:33
閱讀 1211·2021-10-09 09:44
閱讀 411·2019-08-30 13:59
閱讀 3487·2019-08-30 11:26
閱讀 2190·2019-08-29 16:56
閱讀 2860·2019-08-29 14:22
閱讀 3157·2019-08-29 12:11
閱讀 1282·2019-08-29 10:58