我有一个示例类:
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 文档以寻求解决方案,但似乎没有找到任何东西。
我知道您可以使用__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()。我该怎么做呢?
注意:这是一种简化。实际上,我有大量方法,在开发程序时我不断添加、删除和更改方法名称