【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

你可能感兴趣的:(python学习笔记)