我对使用python list对象感兴趣,但功能略有改变。特别是,我希望列表是1索引而不是0索引。例如:
>> mylist = MyList()
>> mylist.extend([1,2,3,4,5])
>> print mylist[1]
输出应为:1
但是,当我更改__getitem__()
和__setitem__()
方法来执行此操作时,出现了RuntimeError: maximum recursion depth exceeded
错误。我对这些方法进行了很多修改,但这基本上就是我在那里做的:
class MyList(list):
def __getitem__(self, key):
return self[key-1]
def __setitem__(self, key, item):
self[key-1] = item
我想问题是它self[key-1]
本身正在调用与定义的方法相同的方法。如果是这样,如何使它使用list()
方法而不是MyList()
方法?我尝试使用super[key-1]
代替,self[key-1]
但导致投诉TypeError: 'type' object is unsubscriptable
有任何想法吗?另外,如果您可以为此指出一个好的教程,那就太好了!
谢谢!
使用该super()
函数调用基类的方法,或直接调用该方法:
class MyList(list):
def __getitem__(self, key):
return list.__getitem__(self, key-1)
要么
class MyList(list):
def __getitem__(self, key):
return super(MyList, self).__getitem__(key-1)
但是,这不会改变其他列表方法的行为。例如,索引保持不变,这可能导致意外结果:
numbers = MyList()
numbers.append("one")
numbers.append("two")
print numbers.index('one')
>>> 1
print numbers[numbers.index('one')]
>>> 'two'
我在下棋。我想做一个抽象的piece类,然后可以通过pawn/knight/rook/等进行扩展。假设我的piece类是这样的: 我希望Pawn具有相同的sayName功能,但我希望它具有不同的movePiece功能,因为Pawn有自己独特的移动方式。我怎么做典当,使它扩展件,并覆盖件的移动件功能?
问题内容: 我刚刚有人问我一个问题。 问 -Java是否支持多重继承? 我 -不 问-Java中的每个类都扩展了类Object(类Object除外),如果我们从外部扩展了一个类,例如 那么你可以说A类扩展了B类和Object类,这意味着它是多重继承。那么怎么说Java不支持多重继承呢? 我 -实际上,类B扩展了类Object,因此,当你在类A中扩展类B时,类A间接扩展了类Object。这是多级继承
我在挣扎。 当扩展一个类时,我可以很容易地向它添加一些新属性。 但是,当我扩展基类时,如果我想向基类的对象(简单对象的属性)添加新属性,该怎么办? 下面是一个带有一些代码的示例。 基类 派生类 现在,正如您可以从行内注释中看到的,这将激怒TypeScript。但这在JavaScript中工作。那么,实现这一目标的正确方法是什么呢?如果没有,问题是在我的代码模式本身吗?什么模式适合这个问题? 也许您
问题内容: 我想向内置类型添加一些属性,所以我这样写: 但仅包含元素。为什么我在这里不工作?我应该如何从类似内置类型的继承?像这样的不可变类型是否相同? 问题答案: 该类型通常在其方法内进行列表的实际初始化,因为这是可变类型的约定。子类型化不可变类型时,只需要覆盖即可。虽然 可以在对列表进行子分类时覆盖,但对于您的用例而言,这样做没有多大意义。覆盖比较容易: 另请注意,在这种情况下,建议不要使用。
问题内容: 我有一个收集类型: 我的对象中有一个列表: B在哪里延伸A 但我不能执行以下操作: 我不明白为什么,因为Collection是由List实现的。 问题答案: 让我们假设您可以做您描述的事情: 该方法调用看起来不错,因为它是一个包含s 的集合。但是,如果允许上述分配,那么我们会遇到一个问题,因为它实际上是对实例的引用-我只是将a 添加到只能容纳s 的列表中! 阿斯克还说: 我不明白为什么
编组或取消编组对象 您可以将若干个对象合并到一个组中,把这些对象作为一个单元同时进行处理。这样,您就可以同时移动或变换若干个对象,且不会影响其属性或相对位置。例如,您可能想将徽标设计中的对象编成一组,以便将其作为一个单元进行移动和缩放。 编组对象被连续堆叠在图稿的同一图层上,位于组中最前端对象之后;因此,编组可能会更改对象的图层分布及其在给定图层上的堆叠顺序。如果您选择位于不同图层中的对象并将其编