zoukankan      html  css  js  c++  java
  • 内置函数的补充与getattrebuit & item系列

    isinstance(g1,Room)判对象g1是否为Room类的实例化对象
    issubclass(danyuan,Room)判断danyuan类是否为Room类的子类
    __getattr__  __getattribute__
    当只有前者的时候,如果实例化对象查找的属性或者方法不存在,前者会被触发,若二者同时存在,后者只要执行就触发,而前者不会,若要前者也能触发执行,需要在后者加入异常处理
    具体代码实现如下:
     1 class Room:
     2     def __init__(self,num):
     3         self.name=num
     4 
     5     def __getattr__(self, item):
     6         print("11111111111111")
     7 
     8     def __getattribute__(self, item):
     9         print('22222222222222')
    10         raise AttributeError("天王盖地虎")
    11 
    12 class danyuan(Room):
    13     pass
    14 
    15 r1=Room('007')
    16 # print(isinstance(g1,Room))
    17 # print(issubclass(danyuan,Room))
    18 
    19 r1.name

     用法与__getattr__类似,attr是用对象点(s1.name=‘’tom‘’)属性赋值 而item则是通过字典方式赋值(s1['name']=‘’tom‘’)都会触发它们对应的机制

    实现代码如下:

     1 class Work:
     2     def __getitem__(self, item):
     3         print('get被触发了')
     4         return self.__dict__[item]
     5 
     6     def __setitem__(self, key, value):
     7         print('set被触发了')
     8         self.__dict__[key]=value
     9 
    10     def __delitem__(self, key):
    11         print('del被触发了')
    12         self.__dict__.pop(key)
    13 
    14 w1=Work()
    15 print(w1.__dict__)
    16 w1.name='tim'         #未用字典方式设置对象属性 不会触发__setitem__
    17 print(w1.__dict__)
    18 print('*************************')
    19 w1['age']=18          #触发__setitem__
    20 print(w1.__dict__)
    21 del w1['name']        #触发__delitem__
    22 print(w1.__dict__)
    23 
    24 print(w1['age'])      #触发__getitem__
    25 
    26 # w1['sex']='man'
    27 # print(w1.__dict__)


  • 相关阅读:
    访存模型
    Petri网
    Forward secrecy
    TensorFlow训练神经网络cost一直为0
    解决tensorflow在训练的时候权重是nan问题
    tf.argmax
    Keras教程
    z-score
    隐马尔可夫(HMM)、前/后向算法、Viterbi算法
    受限玻尔兹曼机基础教程
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9250532.html
Copyright © 2011-2022 走看看