屬性相關的內建函數為刪除、回傳或是判斷是否有某屬性等等的用途,以下為列表說明
參數版本 | 功能 |
---|---|
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()
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()
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()
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 屬性的裝飾子,所謂 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()
setattr(o, n, v) 設定物件 o 的新屬性 n 為 v ,舉例如下
class Demo:
pass
d = Demo()
setattr(d, "a", 0)
print(d.a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fatt05.py
# 功能:示範內建函數
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 fatt05.py |
0 |
$ |
vars()
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} |
$ |
相關教學影片