hasattr(obj, name)属性存在返回true,不存在返回false
getattr(obj, name, default=None)属性存在返回对应value,不指定default,不存在报错,指定default返回default的值
setattr(x, y, v)
delattr(x, ‘y’)
hasattr
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print('%s吃饭' % self.name)
class Dog(Animal):
pass
dog = Dog('小花狗')
print(hasattr(dog, 'eat'))
print(hasattr(dog, 'eater'))
print(hasattr(dog, 'name'))
'''
打印结果:
True
False
True
'''
getattr
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print('%s吃饭' % self.name)
class Dog(Animal):
pass
dog = Dog('小花狗')
print(getattr(dog, 'name'))
print(getattr(dog, 'eat'))
func = getattr(dog, 'eat')
func()
# 不指定default会报错
print(getattr(dog, 'food', '不存在的属性'))
setattr(x, y, v)
def setattr(x, y, v): # real signature unknown; restored from __doc__
"""
Sets the named attribute on the given object to the specified value.
setattr(x, 'y', v) is equivalent to ``x.y = v''
"""
pass
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print('%s吃饭' % self.name)
class Dog(Animal):
pass
dog = Dog('小花狗')
setattr(dog, 'food', '骨头')
setattr(dog, 'name', '王二狗')
print(dog.__dict__)
'''
打印结果
{'name': '王二狗', 'food': '骨头'}
'''
delattr
def delattr(x, y): # real signature unknown; restored from __doc__
"""
Deletes the named attribute from the given object.
delattr(x, 'y') is equivalent to ``del x.y''
"""
pass
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print('%s吃饭' % self.name)
class Dog(Animal):
pass
dog = Dog('小花狗')
setattr(dog, 'age', 2)
setattr(dog, 'food', '骨头')
print(dog.__dict__)
delattr(dog, 'name')
print(dog.__dict__)
'''
打印结果
{'name': '小花狗', 'age': 2, 'food': '骨头'}
{'age': 2, 'food': '骨头'}
'''
重写
class Animal:
def __init__(self, name, color):
self.name = name
self.color = color
def __setattr__(self, key, value):
print('设置成功!')
self.__dict__[key] = value
# 只有在取不到属性值是才会运行
def __getattr__(self, item):
print('没有哇!%s' % item)
def __delattr__(self, item):
print('删除%s成功!' % item)
dog = Animal('花斑狗', '五颜六色')
'''
设置成功!
设置成功!
'''
dog.food = '大骨头'
'''
设置成功!
'''
print(dog.name)
# 花斑狗
print(dog.teacher)
'''
没有哇!teacher
None
'''
del dog.color
# 删除color成功!