[python] __setitem__与__getitem__的使用

我们在使用 numpy 的时候, 经常切片操作, 怎么实现的呢:

t = np.array([1, 2, 3, 4, 5])
print(t[1:2], type(t[1:2]), type(t))

我们可以很容易在python 官网上查到这是使用了 __setitem__,__getitem__ 内置函数.
除了内置函数, 还需要做点操作. 下面是我写的一个二进制操作类的雏形, 供大家参考:

import math
class A():
    def __init__(self, value=1):
        if isinstance(value, int):
            self.vals = [value]
        else:
            self.vals = value
        self.it_s = None 
        self.it_e = None 

    def __add__(self, other):
        return self.vals[0] + other
    
    def __sub__(self, other):
        return self.vals[0] - other
    
    def __setitem__(self, key, value):
        self.vals[0] = (self.vals[0] & ((~((1 << (key.stop-key.start))-1))<<key.start)) \
                        | ((((1 << (key.stop-key.start))-1)&value)<<key.start)
           
    def __getitem__(self, key):
        k = A(self.vals)
        k.it_s = key.start
        k.it_e = key.stop
        return k
  
    
    def __str__(self):
        s = 0 if self.it_s is None else self.it_s
        e = math.ceil(math.log2(self.vals[0])) if self.it_e is None else self.it_e 
        return str((self.vals[0] & ((1 << e) - 1))>> s) 

测试调用方法:

a = A(100)
a[1:2] = 3
print(f'a[1:2] ={a} {a[1:3]} {type(a[1:3])}')

输出:

$ python test/t_slice.py 
a[103 3 <class '__main__.A'>

有点其他事情要外出, 没来得及验证, 我也是分享一下思路, 有问题评论区指出.

相关推荐

  1. [python] __setitem____getitem__使用

    2024-04-23 12:44:03       182 阅读
  2. Py深度学习基础|python中类特殊方法-__getitem__()

    2024-04-23 12:44:03       34 阅读
  3. sqoop安装使用

    2024-04-23 12:44:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 12:44:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 12:44:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 12:44:03       87 阅读
  4. Python语言-面向对象

    2024-04-23 12:44:03       96 阅读

热门阅读

  1. git 常用命令

    2024-04-23 12:44:03       57 阅读
  2. Elasticsearch与IK分词器:深度解析与实战应用

    2024-04-23 12:44:03       52 阅读
  3. python借助elasticsearch实现标签匹配计数

    2024-04-23 12:44:03       35 阅读
  4. 五道基础且高频的Python算法面试题

    2024-04-23 12:44:03       36 阅读
  5. .NET/C#汇总 —— 数据库概念知识

    2024-04-23 12:44:03       36 阅读
  6. Docker容器使用

    2024-04-23 12:44:03       26 阅读
  7. C语言数组相关练习题

    2024-04-23 12:44:03       39 阅读