Python 速查手冊

9.8 屬性相關

屬性相關的內建函數為刪除、回傳或是判斷是否有某屬性等等的用途,以下為列表說明

參數版本功能
delattr(o, n)刪除物件 o 的屬性 n 。
getattr(o, n)回傳物件 o 的屬性 n 。
hasattr(o, n)判斷物件 o 是否有屬性 n 。
property()用作 property 屬性的裝飾子。
setattr(o, n, v)設定物件 o 的新屬性 n 為 v 。
vars(o)回傳物件 o 預設的 __dict__ 屬性。

delattr(o, n) 刪除物件 o 的屬性 n ,舉例如下

class Demo:
    def __init__(self, i):
        self.i = i
        self.x = "xxx"
        self.y = "yyy"
        self.z = "zzz"

d = Demo(2)
print(dir(d))
delattr(d, "x")
delattr(d, "y")
delattr(d, "z")
print(dir(d))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt01.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fatt01.py
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'i', 'x', 'y', 'z']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'i']
$

getattr(0, n) 回傳物件 o 的屬性 n ,舉例如下

class Demo:
    def __init__(self, i):
        self.i = i
        self.x = "xxx"
        self.y = "yyy"
        self.z = "zzz"

d = Demo(22)
print(getattr(d, "i"))
print(getattr(d, "x"))
print(getattr(d, "y"))
print(getattr(d, "z"))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt02.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fatt02.py
22
xxx
yyy
zzz
$

hasattr(o, n) 判斷物件 o 是否有屬性 n ,舉例如下

class Demo:
    def __init__(self, i):
        self.i = i
        self.x = "xxx"
        self.y = "yyy"
        self.z = "zzz"

d = Demo(22)
print(hasattr(d, "w"))
print(hasattr(d, "x"))
print(hasattr(d, "y"))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt03.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fatt03.py
False
True
True
$

property() 用作 property 屬性的裝飾子,所謂 property 屬性是用 __get__() 取得,另外用 __set__() 設定,刪除時執行 __delete__() ,舉例如下

class Demo:
    def __init__(self):
        self._x = None
    
    @property
    def x(self):
        """屬性 x"""
        print("getter")
        return self._x
    
    @x.setter
    def x(self, value):
        self._x = value
        print("setter")
    
    @x.deleter
    def x(self):
        print("del x")
        del self._x

d = Demo()
d.x
d.x = 2
del d

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt04.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fatt04.py
getter
setter
$

setattr(o, n, v) 設定物件 o 的新屬性 nv ,舉例如下

class Demo:
    pass

d = Demo()
setattr(d, "a", 0)
print(d.a)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt05.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fatt05.py
0
$

vars(o) 回傳物件 o 預設的 __dict__ 屬性,也就是完整的屬性列表,舉例如下

class Demo:
    def __init__(self):
        self.a = 1
        self.b = 2

d = Demo()
print(vars(d))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt06.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fatt06.py
{'a': 1, 'b': 2}
$

上一頁: 9.7 作用域相關
Python 速查手冊 - 目錄
下一頁: 9.9 數字處理
回 Python 教材首頁