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的执行。

  • 相关阅读:
    luogu P1396 营救
    luogu P2009 跑步
    2017 9 22
    2017 9 22 模拟赛T2
    2017 9 21
    luogu P1433 吃奶酪
    luogu p1867【Mc生存】经验值
    luogu p1387 最大正方形
    单例模式1
    Java 设计模式
  • 原文地址:https://www.cnblogs.com/zhaijihai/p/10211163.html
Copyright © 2011-2022 走看看