python - 如何制作一个用方括号调用的方法?

标签 python python-3.x oop methods slice

1。我需要什么

我有一个名为 List 的 Python 类,它有一个名为 mylist 的列表作为属性。

class List:
    def __init__(self):
        self.mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]

现在我想创建一个名为 slice 的方法,它具有与 __getitem____setitem__ 相同的属性。也就是说,使用 Python 切片语法调用方法来获取和设置 mylist 属性的值。

l = List()
l.slice[2:6] # returns [3, 4, 5, 6]
l.slice[-1]  # returns 9
l.slice[1] = 10 # change the value in position 1 of my list to 10
l.slice[-1] = 10 # change value in the last position of my list to 10

我认为这个方法应该与 Pandas 的 DataFrame().iloc[] 具有相同的逻辑。

2。我尝试过的内容

我尝试使用@property装饰器,但我仍然不太明白如何使用它来解决这个问题。

class List:
    def __init__(self):
        self.mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    @property
    def slice(self):
        return self._mylist 
    
    @slice.__getitem__
    def iloc(self, mini, maxi):
        self._mylist = self.mylist[mini, maxi]

但这会返回以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_1592/4117693097.py in <module>
----> 1 class List:
      2     def __init__(self):
      3         self.mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
      4 
      5     @property

~\AppData\Local\Temp/ipykernel_1592/4117693097.py in List()
      7         return self._mylist
      8 
----> 9     @slice.__getitem__
     10     def iloc(self, mini, maxi):
     11         self._mylist = self.mylist[mini, maxi]

AttributeError: 'property' object has no attribute '__getitem__'

最佳答案

只需返回属性中的mylist

class List:
    def __init__(self):
        self.mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]

    @property
    def slice(self):
        return self.mylist


l = List()
print(l.slice[2:6])
print(l.slice[-1])  
l.slice[1] = 10
print(l.mylist[1])
l.slice[-1] = 10
print(l.mylist[-1])

输出

[3, 4, 5, 6]
9
10
10

关于python - 如何制作一个用方括号调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69589014/

相关文章:

java - 什么是类、引用和对象?

python - 使用 SQLAlchemy 在 PostgreSQL 中创建函数和触发器

java - 在不使用 instanceof 的情况下使用重载方法进行动态调度(运行时多态性)

python - 在 Tkinter 中与进度条相交

python - 改进正则表达式搜索模式

python - 访问在字典中找到的 'Tkinter' 按钮

python - pyspark 抛出 TypeError : textFile() missing 1 required positional argument: 'name'

java - 在 Java 中从父类调用子类构造函数

python - 如何使用 file.upload 和 requests 将文件上传到 slack

python - CherryPy 线程池不增长和/或收缩