精华内容
下载资源
问答
  • 相关内容: __del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__ 首发:posted @ 2018-02-07 01:08 修改: 2018-02-14 13:57:增加__repr__ __del__: 被...


    相关内容:

    __del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__

     

     

    首发:posted @ 2018-02-07 01:08

    修改:

    1. 2018-02-14 13:57:增加__repr__

     


    __del__:

    • 被称为析构函数
    • 当删除一个对象时,python解释器会默认调用__del__()方法
    import gc
    class Dog(object):
        def __init__(self,name):
            self.name=name
        def __del__(self):
            print("删除成功")
        def wang(self):
            print("汪汪汪")
    
    d1=Dog("小黑")
    d1.wang()
    # d1=None
    # del d1
    #以上两种都可以删除,或者程序结束也会释放内存
    
    # d1.wang()#删除后这里会报错

     


    __doc__ :

    • 类的文档字符串
    class Dog:
        """这是这个类的说明
        """
        def __init__(self,name):
            self.name=name
    
    d1=Dog("奥巴马")##创建对象,传入__init__所需的变量,self默认自动传入
    
    print(Dog.__doc__)
    
    
    --------------------------
    结果:
    这是这个类的说明

     


    __dict__ :

    • 类的属性,包含类的相关变量和方法
    class Dog:
        #self 代表的是类的实例,代表当前对象的地址
        def __init__(self,name):##称为类的构造函数,进行初始化成员变量
            self.name=name
        def bulk(self):###自定义函数
            print("%s:汪汪!"%self.name)
    
    d1=Dog("奥巴马")##创建对象,传入__init__所需的变量,self默认自动传入
    
    print(Dog.__dict__)###类相关的变量,函数
    print(d1.__dict__)##只有自身的实例变量
    
    
    -----------------------------------------
    {'__module__': '__main__', '__init__': <function Dog.__init__ at 0x000002B6950FC9D8>, 'bulk': <function Dog.bulk at 0x000002B6950FCA60>, '__dict__': <attribute '__dict__' of 'Dog' objects>, '__weakref__': <attribute '__weakref__' of 'Dog' objects>, '__doc__': None}
    {'name': '奥巴马'}


    __module__:

    • 类定义所在的模块:源文件中会显示__main__,导入为模块时为类定义所在的模块


    __getitem__:

    • 凡是在类中定义了这个__getitem__ 方法,那么它的实例对象(假定为p),可以像这样 p[key] 取值,当实例对象做p[key] 运算时,会调用类中的方法__getitem__。

    image

    __setitem__:

    • 使对象可以使用obj[key]=value来调用__setitem__进行操作

    image

    __delitem__:

    • 使对象可以使用del obj[key]来删除属性

    image

     

     

    class A(object):
        def __getitem__(self, key):
            print('__getitem__', key)
        def __setitem__(self, key, value):
            self.value=value
            print('__setitem__', key, value)
        def __delitem__(self, key):
            print('__delitem__', key)
    
    obj = A()
    
    result = obj['k1']   # 触发__getitem__
    obj['k2'] = 'neo'   # 触发__setitem__
    print(obj.value)  #设置的可以获取
    del obj['k1']        #触发__delitem__
    image

     


    __str__:

    • 直接调用对象时,显示的字符串

    image

     

    class Dog(object):
        def __init__(self,name):
            self.name=name
        def __str__(self):
            return self.name
    d=Dog("apple")
    print(d)
    class Dog(object):
        def __init__(self,name):
            self.name=name
        def __str__(self):
            return "这是一个?"
    d=Dog("apple")
    print(d)


    __repr__:

    • __repr__与__str__的功能基本一致,不同的是,在交互式环境中,直接输入类的一个实例对象也能得到结果。
    • 而如果类中没有定义__str__,那么此时__repr__就相当于__str__
    • 而基本上,repr的功能使用较少,主要用于debug,其他情况都可以使用__str__来代替

     

    >>> class Dog(object):
        def __init__(self,name):
            self.name=name
        # def __str__(self):
        #     return "这是一个?"
        def __repr__(self):
            return "这是一个?"
    
    >>> d=Dog("apple")
    >>> d
    这是一个?
    >>> print(d)#没有__str__的情况
    这是一个?

     

     


    __call__:

    • 一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

    image

     

    class call_test(object):
        def __call__(self, *args, **kwargs):
            print("hello ",args,kwargs)
    
    
    c=call_test()
    c()

    转载于:https://www.cnblogs.com/progor/p/8424898.html

    展开全文
  • class LoggedMappingMixin: __slots__ = () # 混入类都没有实例变量,因为直接实例化混入类没有任何意义 ... __setitem__(self,key,value):设置给定键的值 __delitem__(self,key):删除给定键对应的元素。 ...
    class LoggedMappingMixin:
        __slots__ = ()  # 混入类都没有实例变量,因为直接实例化混入类没有任何意义
        """
        __getitem__(self,key):返回键对应的值。
        __setitem__(self,key,value):设置给定键的值
        __delitem__(self,key):删除给定键对应的元素。
        
        
        __getattr__内置使用点号获取实例属性属性如 s.name,自调用__getattr__
        __setattr__设置类实例属性 如s.name='tom',自调用__setattr__
        __getitem__ 使用[]获取实例属性 如s['name'],自调用__getitem__
        __setitem__ 使用[]设置实例属性如 s['name'] = 'tom' ,自调用__setitem__
        __dict__ 为参数字典
    
        """
    
        def __getitem__(self, key):
            print('Getting ' + str(key))
            return super().__getitem__(key)
    
    展开全文
  • # __getitem__ __setitem__ __delitem__ # 只适用于类似操作字典的操作才会触发 class Foo: def __getitem__(self, item): print('调用了__getitem__') return self.__dict__[item] def __setitem__(s.....
    # __getitem__ __setitem__ __delitem__
    # 只适用于类似操作字典的操作才会触发
    class Foo:
        def __getitem__(self, item):
            print('调用了__getitem__')
            return self.__dict__[item]
    
        def __setitem__(self, key, value):
            self.__dict__[key] = value
            print('调用了__setitem__')
    
        def __delitem__(self, key):
            self.__dict__.pop(key)
            print('调用了__delitem__')
    
    
    f1 = Foo()
    
    f1['name'] = 'alex'  # 调用了__setitem__
    f1['age'] = 18  # 调用了__setitem__
    
    f1['age']   # 调用了__getitem__
    
    print(f1.__dict__)  # {'name': 'alex', 'age': 18}
    
    del f1['name']  # 调用了__delitem__

     

    转载于:https://www.cnblogs.com/dangrui0725/p/9470563.html

    展开全文
  • item系列 __getitem__, __setitem__,__delitem__ 文章目录item系列 `__getitem__, __setitem__`,`__delitem__`item系列`__getitem__`,`__setitem__`,`__delitem__`应用实例 item系列__getitem__,__setitem__,__...

    item系列 __getitem__, __setitem__,__delitem__

    item系列__getitem__,__setitem__,__delitem__

    • __getitem__ : 通过中括号取值, 触发它的执行

    • __setitem__ : 通过中括号赋值, 触发它的执行

    • __delitem__ : 通过中括号删值, 触发它的执行

      class Foo:
          def __init__(self, name):
              self.name = name
      
          def __getitem__(self, item):
              # print(self.__dict__[item])  # 方式一
              print(getattr(self, item))  # 方式二
      
          def __setitem__(self, key, value):
              print("obj[key]=value时,我执行")
              # self.__dict__[key] = value  # 方式一
              setattr(self, key, value)  # 方式二
      
          def __delitem__(self, key):
              print('del obj[key]时,我执行')
              # self.__dict__.pop(key)      # 方式一
              delattr(self, key)  # 方式二
      
          def __delattr__(self, item):
              print('del obj.key时,我执行')
              self.__dict__.pop(item)
              # delattr(self, item)         # 注意: 这里如果这样使用就递归了
      
      
      f1 = Foo("lili")
      
      # 自动触发__setitem__
      f1["age"] = 29  # obj[key]=value时,我执行
      f1["age1"] = 19  # obj[key]=value时,我执行
      
      # 自动触发__delattr__
      del f1.age1  # del obj.key时,我执行
      
      # 先自动触发__delitem__, 再触发__delattr__
      del f1["age"]
      '''
      del obj[key]时,我执行
      del obj.key时,我执行
      '''
      
      # 自动触发__setitem__
      f1["name"] = "淘小欣开发之路" # obj[key]=value时,我执行
      print(f1.__dict__)  # {'name': '淘小欣开发之路'}
      

    应用实例

    • 在不继承字典类的情况下, 自定义一个字典, 支持 [ ] 取值赋值

      class Mydict:
          def __init__(self, **kwargs):
              # 方案一
              # for key,value in kwargs.items():
              #     setattr(self,key,value)
      
              # 方案三
              # for key,value in kwargs.items():
              #     self.__dict__[key]=value
      
              # 方案二
              self.__dict__.update(kwargs)
      
          def __getitem__(self, item):
              # 方案一
              # return self.__dict__[item]
      
              # 方案二
              return getattr(self, item)
      
          def __setitem__(self, key, value):
              # 方案一
              # setattr(self,key,value)
      
              # 方案二
              self.__dict__[key] = value
      
          def __delitem__(self, key):
              del self.__dict__[key]
      
      
      dd = Mydict()
      print(dd.__dict__)  # {}
      dd["name"] = "淘小欣"
      print(dd.__dict__)  # {'name': '淘小欣'}
      
    展开全文
  • __setitem__,__getitem,__delitem__ class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, va...
  • __getitem__、__setitem__、__delitem__ 总结: __getitem__,__setitem_,__delitem__ : obj[‘属性’]的方式去操作属性时触发的方法__getitem__:obj['属性'] 时触发__setitem__:obj['属性']=属性的值 时触发__...
  • __getitem__, __setitem__

    2020-07-04 16:34:33
    __getattr__内置使用点号获取实例属性属性如 s.name,自调用__...__setitem__ 使用[]设置实例属性如 s['name'] = 'tom' ,自调用__setitem__ 给对象进行容器化可以对类实现这个函数 class Student: def ...
  • item系列 class Person(object): def __init__(self, name): self.name = name def __getitem__(self, item): return self.__dict__[item] ... def __setitem__(self, key, value...
  • 七 __setitem__,__getitem,__delitem__ ''' 只适用于字典操作 ''' class Foo: def __init__(self,name): self.name = name # 当获取字典时,调用该方法 def __getitem__(self, item): print('执行了,__getit...
  • #__getitem__ __setitem__ __delitem__运行设置key value值了class fun: def __init__(self): print('test') def run(self): print('run') def __getitem__(self, item): print('__getite...
  • class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): print('obj[key]时,我执行') print(self.__dict__[item]) def __setitem__(sel...
  • 1. python中当调用一个对象的 obj["name"] = "admin" 或者 obj["name"]的时候,说明该对象要么是字典,要么类中实现了__setitem__方法和__getitem__方法 2. 字典 class Foo(dict): pass foo = Foo() foo["name...
  • python中 __setitem__(),__getitem__()

    千次阅读 2019-04-24 09:11:47
    def __setitem__(self, key, value): # print(key,value) self.__dict__[key]=value #将对象当作字典操作,根据键获取值时会触发该方法 def __getitem__(self, item): # print(item) retu...
  • item类方法可以实现像操作字典一样操作实例的属性 class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) ... def __setitem__(self, key, value): ...
  • 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__、__setitem__、__delitem__、__len__方法去模拟。 __getitem__(self,key):返回键对应的值。 __setitem__(self,key,value)...
  • class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, value): self....
  • 目录__getitem__方法__setitem__方法__delitem__方法整合效果 __getitem__方法 有这个方法,可以使用中括号调用对象的属性,如下: class Tag: def __init__(self): self.change_dict = {'aaa': 'this is aaa', ...
  • python __setitem__()方法理解

    万次阅读 2017-10-26 16:05:37
    __setitem__(self,key,value):该方法应该按一定的方式存储和key相关的value。在设置类实例属性时自动调用的。 # -*- coding:utf-8 -*- class A: def __init__(self): self['B']='BB' self['D']='DD' def __...
  • 目录 一、__setitem__ 二、__getitem__ 三、__delitem__与__delattr__ class Foo: def __init__(self, name): self.name = name def __getitem_...
  • 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__、__setitem__、__delitem__、__len__方法去模拟。 __getitem__(self,key):返回键对应的值。 __setitem__(self,key,value)...
  • __setitem__,__getitem,__delitem__ #以字典格式操作对象的属性 class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) de...
  • python之 __getattr__、__getattr__、__getitem__、__setitem__ 使用 __getattr__内置使用点号获取实例属性属性如 s.name,自调用__getattr__ __setattr__设置类实例属性 如s.name='tom',自调用__setattr__ __...
  • 对原作改变了一下,在未定义子对象属性时__getitem__中使用现成的__setitem__来定义。 ## encoding:utf-8 """ 这个类继承了object, object是Python的最小单元,可以在Python的">>>"控制台用dir(objct)...
  • __setitem__:每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环 __getitem__:当访问不存在的属性时会调用该方法 __delitem__:当删除属性时调用该方法 1 2 3 ...
  • ... __xxxitem__:使用 [''] 的方式操作属性时被调用 __setitem__:每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环 __getitem__:当访问不存在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,865
精华内容 3,546
热门标签
关键字:

dict_setitem