小编use*_*423的帖子

有没有办法使对象可下标?

我有一个示例类:

class collection:
    def __init__(self, itemArray):
        self.itemArray = itemArray
        self.max = len(itemArray)


    def __iter__(self):
        self.index = 0
        return self

    def __next__(self):
        if self.index < self.max:
            result = self.itemArray[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration()
Run Code Online (Sandbox Code Playgroud)

我的目标是访问变量self.itemArray而不必collection.itemArray从类外部显式使用。我希望能够通过使其成为可迭代对象来循环对象,这就是为什么我有__iter____next__

我想模仿字符串类型使用的行为,即。

stringVar = "randomTextString"
stringVar[indexVal]
Run Code Online (Sandbox Code Playgroud)

尝试使用对象进行此操作是行不通的,因为它会引发 TypeError,因为对象不可下标。

我只需要有人为我指明正确的方向。我查看了 python 文档以寻求解决方案,但似乎没有找到任何东西。

python oop

4
推荐指数
1
解决办法
91
查看次数

如何在Python中重定向方法调用?

我知道您可以使用__getattr__()该类的属性来访问不存在的属性。然而我想用函数做同样的事情。

我读到Python对待属性和方法是一样的,所以你__getattr__()也使用for方法。这是真的?

class container:
    def __init__(self, data):
        self.data = data

    def __getattr__(self, item):
        ##Don't know the code to put here vv
        result = getattr(self.data, item)


class data:
    def printHello(self):
        print("hello")

    def printString(self, string):
        print(string)

def main():
    someData = data()
    someContainer = container(someData)
    someContainer.printString("sup")

main()
Run Code Online (Sandbox Code Playgroud)

目标:我希望能够编写container.printHello()并让它调用container.data.printHello(). 我还想要一个能够传递参数的解决方案printString()。我该怎么做呢?

注意:这是一种简化。实际上,我有大量方法,在开发程序时我不断添加、删除和更改方法名称

python oop

3
推荐指数
1
解决办法
2604
查看次数

标签 统计

oop ×2

python ×2