Python中的描述符

2021-09-13 00:27:11 字數 2433 閱讀 3441

解答三個問題,描述是什麼?如何實現?使用場景?

描述符就是乙個具有繫結行為的物件屬性,其屬性訪問將由描述符協議中的方法覆蓋。這些方法為__get____set____delete__。如果這些方法中的任何乙個針對某個物件定義,那麼它就被認為是乙個描述符。

__get__用於訪問屬性。它返回屬性的值,或者在所請求的屬性不存在的情況下出現attributeerror異常

__set__將在屬性分配操作中呼叫。不會返回任何內容

__delete__控制刪除操作。不會返回內容

2.1 基於類建立

#!/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()函式
#!/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)

通過結合使用描述符,可以實現優雅的程式設計,允許建立 setters 和 getters 以及唯讀屬性

根據值或型別請求進行屬性驗證

大量用於各種框架中,比如django的models

python 描述 python描述符

在python中,訪問乙個屬性的優先順序順序按照如下順序 1.類屬性2.資料描述符3.例項屬性4.非資料描述符5.getattr 方法。描述符,用一句話來說,就是將某種特殊型別的類的例項指派給另乙個類的屬性 注意 這裡是類屬性,而不是物件屬性 而這種特殊型別的類就是實現了 get set delet...

python 描述符基本

相關資料 python的描述符 下一站,我等你 描述符的本質類 python為開發者提供了乙個非常強大的功能 描述符。那什麼是描述符呢?通過檢視python的官方文件,我們知道把實現了 get set 和 delete 中的其中任意一種方法的類稱之為描述符,描述符的本質是新式類,並且被 的類 即應用...

Python 描述符練習

要求 先定義乙個溫度類,然後定義兩個描述符用於描述攝氏度和華氏度兩個屬性 要求這個兩個屬性會自動進行轉換,也就是說你可以給攝氏度這個屬性賦值,然後列印的話華氏屬性是自動轉換的結果 class celsius def init self,value 26.0 self.value float valu...