python反射

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成功!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值