zoukankan      html  css  js  c++  java
  • 面向对象知识补充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的执行。

  • 相关阅读:
    正则表达式
    js trim函数 去空格函数与正则集锦
    变量的作用域问题
    for...in 语句
    JS小案例分析
    JS动态创建元素的方式
    JS类的封装
    js操作节点小结
    节点兼容
    节点小结
  • 原文地址:https://www.cnblogs.com/zhaijihai/p/10211163.html
Copyright © 2011-2022 走看看