【Lemon】python的動態屬性

目錄

 

動態獲取屬性

動態設置屬性

動態刪除屬性

判斷屬性是否存在


動態獲取屬性

getattr獲取類屬性:

    參數1:類

    參數2:屬性名

    參數3:默認值。如果屬性不存在,則返回該值

 

示例:

# 示例1

class TestData:

    url = 'http://www.baidu.com'

    method = 'get'



# getattr獲取類屬性

res = getattr(TestData, 'url')

print(res) # 輸出結果:http://www.baidu.com



res1 = getattr(TestData, 'result', 'python')

print(res1) # 輸出結果:python



# 示例2class TestData:

    url = 'http://www.baidu.com'

    method = 'get'



name = input('請輸入你要獲取的屬性名:')



# getattr獲取類屬性

res = getattr(TestData, name, 'None')

print(res) # 輸出結果:http://www.baidu.com

 

 

動態設置屬性

setattr設置屬性值:

    參數1:類

    參數2:屬性名

    參數3:屬性值

 

class TestData:

    url = 'http://www.baidu.com'

    method = 'get'

    

# 示例1# 類外面定義類屬性

# 方式一:類.屬性名=屬性值

TestData.result = 'Pass'

print(TestData.result)



# 方式二:動態setattr設置屬性

setattr(TestData, 'para', 'username')

print(TestData.para)  # 輸出結果:username





# 示例2# 將下面2個列表,title作爲屬性名,data作爲屬性值,一一對應起來

title = ['name', 'age', 'gender']

data = ['flora', 26, 'female']



# 以下方法是不可取的,會報錯:AttributeError: type object 'TestData' has no attribute 'title'

# TestData.title[0] = data[0]

# print(TestData.title[0])



# setattr(TestData, title[0], data[0])

# setattr(TestData, title[1], data[1])

# setattr(TestData, title[2], data[2])



for i in range(len(title)):

    setattr(TestData, title[i], data[i])



print(TestData.name, TestData.age, TestData.gender)

# 輸出結果:flora 26 female

 

動態刪除屬性

delattr動態刪除屬性:

    參數1:類

    參數2:屬性名

 

示例:

class TestData:

    url = 'http://www.baidu.com'

    method = 'get'



# 方式一:關鍵字del

del TestData.url

print(TestData.url) # 報錯:AttributeError: type object 'TestData' has no attribute 'url'



# 方式二:delattr

name = input('請輸入你要刪除的屬性:')

delattr(TestData, name)

 

判斷屬性是否存在

hasattr判斷屬性是否存在:

    參數1:類名

    參數2:屬性名

如果屬性存在,返回True;如果屬性不存在,返回False

示例:

class TestData:

    url = 'http://www.baidu.com'

    method = 'get'



del TestData.url



res = hasattr(TestData, 'url')

print(res) # 輸出結果:False

res1 = hasattr(TestData, 'method')

print(res1) # 輸出結果:True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章