6.5 類相關函式(反射機制)
在 Python 中使用反射可以得到物件的屬性,即:反過來讓物件告訴我們他的相關資訊是什么,用于實作在運行時獲取物件的相關資訊,
Python中有幾個內置方法,可以用來檢查或是訪問物件的屬性,這些方法可以用于任意物件,
6.5.1 dir([obj])
描述
不帶引數時,回傳當前范圍內的變數、方法和定義的型別串列;帶引數時,回傳引數的屬性、方法串列,
示例:
>>> dir(input)
['call', 'class', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'name', 'ne', 'new', 'qualname', 'reduce', 'reduce_ex', 'repr', 'self', 'setattr', 'sizeof', 'str', 'subclasshook', 'text_signature']
6.5.2 hasattr(obj, name)、getattr(obj, name):
描述
這2個函式的實參都是一個物件和一個字串,如果字串是物件的屬性之一的名稱,則回傳 True(獲取),否則回傳 False(報錯),
示例:
class Person:
age = 18
def __init__(self):
self.name = '張三'
zs = Person()
print(hasattr(zs, 'name'))
print(hasattr(zs, 'age'))
print(hasattr(zs, 'gender'))
print(getattr(zs, 'name'))
print(getattr(zs, 'age'))
print(getattr(zs, 'gender'))
True
True
False
張三
18
Traceback (most recent call last):
File "E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\面向物件\屬性.py", line 15, in
print(getattr(zs, 'gender'))
AttributeError: 'Person' object has no attribute 'gender'
6.5.3 setattr(obj, name, val):
描述
本函式與 getattr() 相對應,其引數為一個物件、一個字串和一個任意值,字串可以為某現有屬性的名稱,或為新屬性,只要物件允許,函式會將值賦給屬性,如 setattr(x, 'foobar', 123) 等價于 x.foobar = 123,
注解:由于私有名稱混合發生在編譯時,因此必須手動混合私有屬性(以兩個下劃線打頭的屬性)名稱以便使用 setattr() 來設定它,
示例:
class Person:
age = 18
def __init__(self):
self.name = '張三'
self.__gender = '男'
zs = Person()
setattr(zs, 'name', '李四')
setattr(zs, '__gender', '女')
print(zs.name)
print(zs._Person__gender)
setattr(zs, '_Person__gender', '女')
print(zs._Person__gender)
李四
男
女
6.5.4 delattr(obj, name)
描述
delattr函式實參是一個物件和一個字串,該字串必須是物件的某個屬性,如果物件允許,該函式將洗掉指定的屬性,例如 delattr(x, 'foobar') 等價于 del x.foobar ,
示例
class Person:
age = 18
def __init__(self):
self.name = '張三'
self.__gender = '男'
zs = Person()
print(hasattr(zs, 'name'))
delattr(zs, 'name')
print(hasattr(zs, 'name'))
True
False
6.5.5 type(obj)
描述
type函式用來回傳指定物件的型別,
示例
class Person:
def __init__(self):
self.name = '張三'
zs = Person()
print(type(1))
print(type(zs))
print(type(Person))
從自動化辦公到智能化辦公<class 'int'>
<class 'main.Person'>
<class 'type'>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545659.html
標籤:Python
下一篇:fastjson2為什么這么快?
