Contents
7.17. 类的检测、判断、设置、删除、获取¶
7.17.1. 用代码来理解¶
代码示例 1¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
"""
hasattr:判断一个对象是否有对应字符串方法
getattr:获取方法
setattr:添加方法
delattr:删除方法
"""
def bulk(self):
'''
添加的方法
:return:
'''
print("%s is yelling ...." % self.name)
class Dog(object):
def __init__(self, name):
self.name = name
def eat(self, food):
print("{} is eating.....".format(self.name, food))
def call(self,call):
print("{} is wang wang wang ...".format(self.call))
d = Dog("jianli")
choice = str(input(">>:")).strip()
if hasattr(d, choice): #输入字符串,判断是否有对应的字符串的方法
func1 = getattr(d, choice) #获取方法
func1('')
else:
setattr(d, choice, bulk) #d.talk = bulk #通过setattr在类外部添加方法
func2 = getattr(d, choice)
func2(d)
print(d.__dict__)
setattr(d,choice,18)
print(d.__dict__)
print("调用delattr删除类中的属性".center(100,"*"))
delattr(d,choice)
print(d.__dict__)
代码示例 2¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
#hassattr()和setattr()
'''
hasattr(object,name) # 测试某个对象是否有某个属性
object:被测试的对象(类或函数等)
name:属性名(字符串格式)
setattr(object,name,value) # 设置类实例中的某个属性
object:要设置的对象(类或函数等)
name:要设置的属性名(字符串格式)
value:要设置的属性值
gettatr(obj,name[,default]) # 获得类实例中的某个属性(getattr)
如果类实例obj中含有name属性,则返回该属性的值,否则看是否有default,如果有,则将该default的值的返回,否则会产生一个
AttributeError的异常。
'''
class DemoClass:
class_val = 3
def __init__(self,x=0,y=0):
self.x = x
self.y = y
self.info()
def info(self):
print("类属性class_val:",DemoClass.class_val)
print("实例属性x:",self.x)
print("实例属性y:",self.y)
if __name__ == '__main__':
dc = DemoClass()
if hasattr(DemoClass,"class_val"):
setattr(DemoClass,'class_val',1000) #设置类属性的值
if hasattr(dc,"x"):
setattr(dc,"x","xxxxxxxx") #设置实例设置的值
if hasattr(dc,"y"):
setattr(dc,'y','yyyyyyyy')
dc.info()
setattr(dc,'z','zzzzzzzzz') #添加并设置实例属性的值
print('添加的属性z:', dc.z)