zoukankan      html  css  js  c++  java
  • Python----面向对象---内置方法--isinstance(obj,cls)、issubclass(sub, super)、item系列

    一、isinstance(obj,cls): 检查obj是否是类 cls 的对象

    代码示例:

     1 class Foo:
     2     pass
     3 
     4 obj = Foo()
     5 
     6 print(isinstance(obj, Foo))
     7 
     8 结果为:
     9 
    10 True

    二、issubclass(sub, super): 检查sub类是否是 super 类的派生类

    代码实例:

     1 class Foo:
     2     pass
     3 
     4 class Bar(Foo):
     5     pass
     6 
     7 print(issubclass(Bar, Foo))
     8 
     9 结果为:
    10 
    11 True

    三、item系列

    1.查询

     1 class Foo:
     2     def __getitem__(self, item):
     3         print('getitem.....')
     4         print(item)
     5 
     6     def __setitem__(self, key, value):
     7         print('setitem......')
     8         print(key, value)
     9 
    10     def __delitem__(self, key):
    11         print('delitem.......')
    12         print(key)
    13 
    14 obj = Foo()
    15 
    16 obj['name']
    17 
    18 结果为:
    19 
    20 getitem.....
    21 name

    触发了第一个方法

     1 class Foo:
     2     def __init__(self, name):
     3         self.name = name
     4 
     5     def __getitem__(self, item):
     6         # print('getitem.....')
     7         # print(item)
     8         return self.__dict__[item]
     9 
    10     def __setitem__(self, key, value):
    11         print('setitem......')
    12         print(key, value)
    13 
    14     def __delitem__(self, key):
    15         print('delitem.......')
    16         print(key)
    17 
    18 
    19 obj = Foo('egon')
    20 # print(obj.__dict__)
    21 print(obj['name'])
    22 
    23 结果为;
    24 
    25 egon

    如果

    print(obj['namexxx']),不存在的话会报错
    1 Traceback (most recent call last):
    2   File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/25 内置方法.py", line 38, in <module>
    3     print(obj['namexxx'])
    4   File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/25 内置方法.py", line 25, in __getitem__
    5     return self.__dict__[item]
    6 KeyError: 'namexxx'

    这时候可以修改下代码:

    1 return self.__dict__.get(item)

    这样就不会报错了,不存在就返回None

    2、设置

     1     def __setitem__(self, key, value):
     2         # print('setitem......')
     3         # print(key, value)
     4         self.__dict__[key] = value
     5 
     6 obj = Foo('egon')
     7 # print(obj.__dict__)
     8 # print(obj['namexxx'])
     9 obj['sex'] = 'male'
    10 print(obj.__dict__)
    11 print(obj.sex)
    12 
    13 结果为:
    14 
    15 {'name': 'egon', 'sex': 'male'}
    16 male

    可以看到,修改成功,触发了setitem方法

    3、删除

     1  def __delitem__(self, key):
     2         print('delitem.......')
     3         print(key)
     4 
     5 
     6 del obj['name']
     7 
     8 结果为:
     9 
    10 delitem.......
    11 name

    可以看到,触发了delitem方法,

        def __delitem__(self, key):
            print('delitem.......')
            print(key)
            self.__dict__.pop(key)
    
    
    obj = Foo('egon')
    # print(obj.__dict__)
    # print(obj['namexxx'])
    # obj['sex'] = 'male'
    # print(obj.__dict__)
    # print(obj.sex)
    
    del obj['name']
    print(obj.__dict__)
    
    结果为:
    
    delitem.......
    name
    {}
  • 相关阅读:
    算法图解-散列表
    算法图解-笔记
    ERROR:cannot read property 'getAttribute' of null 报错处理
    Error: Cannot find module 'node-sass' 报错处理
    一、Spring Cloud概述
    十、ActiveMQ多节点集群
    九、ActiveMQ的消息存储和持久化
    八、ActiveMQ的传输协议
    七、SpringBoot整合ActiveMQ
    六、Spring整合ActiveMQ
  • 原文地址:https://www.cnblogs.com/xudachen/p/8627223.html
Copyright © 2011-2022 走看看