2019年8月11日 类的内置attr 函数

类本质也是个对象

class BlackMedium:
    feture='ugly'
    def __init__(self,name1,addr):
        self.name=name1
        self.addr=addr

    def sell_hourse(self):
        print('%s正在卖房'%self.name)

    def rent_hourse(self):
        print('%s租房子'%self.name)

print(hasattr(BlackMedium,'sell_hourse'))#类本质也是对象,所以也能用attr方法

》》》

True

 

len(str)-->str.__len__()


class Foo:
    x=1
    def __init__(self,y):
        self.y=y

    def __getattr__(self, item):#调用一个不存在的属性时会触发
        print('调用一个不存在的属性时会触发,执行__getattr__')

    def __delattr__(self, item):
        print('删除一个属性时(无论类中是否存在)会触发,执行__delattr__')
       # self.__dict__.pop(item) #底层设置

    def __setattr__(self, key, value):
        print('设置属性时候会触发执行__setattr__')
        # self.key=value#设置属性,如果这么设置会进入无限递归,因为init中有设置
        self.__dict__[key]=value#本质是在操作字典,底层字典进行设置,这样不会进入递归

f1=Foo(10)
print(f1.y)

print(getattr(f1,'y')) #eg:

f1.sss
del f1.w
f1.z=2
print(f1.__dict__)
print(dir(Foo))
#dir方法反馈的内置功能最全,从中得知上述3个下划线方法都内置有,
#只不过通过重新def定义改变了原本定义的功能,由此可知对内置函数进行操作,必须对底层进行操作才不会报错

 





 

posted @ 2019-08-11 20:27  小圣庄  阅读(97)  评论(0编辑  收藏  举报