好的,这可能是一个非常愚蠢的问题,可能不太可能,或者我在以扭曲的方式思考。所以,请考虑以下内容:
class MyClass:
def __init__(self, x):
self.x = x
self.y = self.x ** 2
class MyList:
def __init__(self, list):
self.list = list
def __iter__(self):
return iter(self.list)
foo = [MyClass(x=1), MyClass(x=2)]
bar = MyList(list=foo)
for i in bar:
print(i.x, i.y)
好的,这里有两个类:
MyClass
只是一些很普通、没什么特别的东西。它有两个实例属性:x
和y
。MyList
则应该是一个类,定义了一个迭代器,其中只包含来自第一个类MyClass
的元素!然后我创建了两个
MyClass
的实例,把它们放在一个列表foo
中,并使用这个列表创建了一个MyList
的实例(bar
)。现在,再次强调,传递给
MyList
的列表应该只包含MyClass
元素!我想让Python知道这一点!当我编写一个循环,遍历bar
的内容时,我希望Python知道bar
中的元素是MyClass
对象。目前我程序中的一个主要不便之处是Python不知道这一点,因此自动补全无法工作。换句话说:在循环中,当我写
i.
时,我希望所有可能的参数都会弹出(在这种情况下是x
和y
)。我能否在Python中为MyList
定义某些神奇的方法,使其知道这个列表的内容?
list
的子类并覆盖append、init等),以及如何使自动完成工作(注意:__dict__
)。 - Cedric H.