面向对象知识补充1

1、__setattr__

1、__setattr__:对属性赋值或修改时候被调用

class Foo:
    def __init__(self,name):
        self.name=name

    def __setattr__(self, key, value):
        print('触发了__setattr__')

a = Foo('zjh')
a.t=2
print(a.__dict__)


# 输出结果

触发了__setattr__
触发了__setattr__
{}

从上面结果可以看出,当我们设置属性或者给属性赋值的时候,会调用__setattr__的执行。但为什么对象f的名称空间没有我们设置的name和x两个变量呢?原因是:因为你重写了__setattr__功能,对它并没有进行任何操作,仅仅只有一条语句,而默认的__setattr__会将属性按照键值对写入对象的名称空间。如果自己重写了__setattr__,但是又没有进行任何操作,要想完成对象属性的赋值操作,必须得通过以下方式才能实现:

a.__dict__['name']='zjh'

print(a.name)


# 输出结果

zjh

参考博客链接:  链接点这

2、__getattr__:只有在调用属性时且属性不存在的情况下,触发这个函数执行.

3、__delattr__:当删除一个对象的属性值时,会触发delattr的执行。

posted @ 2019-01-02 20:38  zhaijihai  阅读(130)  评论(0编辑  收藏  举报