特殊的类方法

__hasattr__(self, item)   

点号拦截运算,注:这是一个绑定对象方法

在一个类中,如果类里定义了该方法(大多数内置类是没有的),则这个类生成的对象加点调用属性或方法时,如果调用的名字不存在,不会报错,会执行__hasattr__()这个方法。

class Person(object):
    def __init__(self,name):
        self.name = name
    def __getattr__(self, item):
        print('调用了一个不存在的属性或方法:%s'%item)
        return 'error'

alex = Person('alex')
print(alex.age)

> 调用了一个不存在的属性或方法:age
> error

__setattr__(self, key, value)

赋值拦截运算,注:这是一个绑定对象方法

如果类里定义了该方法,则这个类生成的对象进行赋值运算时,无论调用的名字是否存在都会执行,都会执行__setattr__()。此时如果想实现原有的对象属性赋值功能应按照下面代码写:

class Person(object):
    def __setattr__(self,key,value)
        self.__dict__['key'] = value

  

猜你喜欢

转载自www.cnblogs.com/huang99882008/p/9343808.html