Python:如何实现';流行音乐';在这个班?
我想让这门课表现得像一个列表。它的数据驻留在属性self.data中。 如果我有一个实例,pp=population,那么定义Python:如何实现';流行音乐';在这个班?,python,Python,我想让这门课表现得像一个列表。它的数据驻留在属性self.data中。 如果我有一个实例,pp=population,那么定义\uu getitem\uu是否意味着我可以引用 pp而不是pp数据?或者是对\uuuu repr\uuuu的定义导致了这种情况? 从list而不是object派生这个类会给我提供“pop”吗。 现在我需要实现“pop”方法。谢谢 class population (object): def __init__ (self): self.data = [] def
\uu getitem\uu
是否意味着我可以引用
pp而不是pp数据?或者是对\uuuu repr\uuuu
的定义导致了这种情况?
从list而不是object派生这个类会给我提供“pop”吗。
现在我需要实现“pop”方法。谢谢
class population (object):
def __init__ (self):
self.data = []
def append(self, item):
self.data.append(item)
def extend(self, item):
self.data.extend(item)
def sort(self):
self.data.sort(cmp=fitnesscompare)
def __getitem__(self, index): return self.data[index]
def __setitem__(self, index, item): self.data[index] = item
def __len__(self): return len(self.data)
def __repr__(self): return repr(self.data)
def copy(self):
return copy.deepcopy(self)
为什么不扩展list类呢?然后您就拥有了所有内置的功能
class population(list):
# custom methods here
请记住,不要为列表引用
self.data
,只需引用self
为什么不扩展list类?然后您就拥有了所有内置的功能
class population(list):
# custom methods here
def pop(self, index=-1) :
return self.data.pop(index)
请记住,不要为列表引用self.data
,只需引用self
def pop(self, index=-1) :
return self.data.pop(index)
这将实现预期的行为:
- 如果未传递索引,则返回最后一项李>
- 如果通过,返回“索引”处的项目李>
- 将使用基础pop()的类型检查李>
- 将引发与基础pop()相同的异常
- 如果未传递索引,则返回最后一项李>
- 如果通过,返回“索引”处的项目李>
- 将使用基础pop()的类型检查李>
- 将引发与基础pop()相同的异常
\uu getitem\uu
是否意味着我可以引用pp而不是pp.data
基本上,是的。添加\uuu getitem\uuu
方法相当于在某些其他语言中重载[]运算符。因此,以下两项是等效的:
pp.data[0]
pp[0]
repr(pp.data)
repr(pp)
或者是对\uuuu repr\uuuu
的定义导致了这种情况
定义\uuuu repr\uuuu
将为您提供对象的字符串表示。因此,这两个调用是等效的:
pp.data[0]
pp[0]
repr(pp.data)
repr(pp)
从list而不是object派生这个类会给我提供“pop”吗
从我现在看到的情况来看,从列表继承可能是一条路。除非我遗漏了什么,唯一不同的是排序方法和复制。其他一切都是一样的
如果我有一个实例,pp=population,那么定义\uu getitem\uu
是否意味着我可以引用pp而不是pp.data
基本上,是的。添加\uuu getitem\uuu
方法相当于在某些其他语言中重载[]运算符。因此,以下两项是等效的:
pp.data[0]
pp[0]
repr(pp.data)
repr(pp)
或者是对\uuuu repr\uuuu
的定义导致了这种情况
定义\uuuu repr\uuuu
将为您提供对象的字符串表示。因此,这两个调用是等效的:
pp.data[0]
pp[0]
repr(pp.data)
repr(pp)
从list而不是object派生这个类会给我提供“pop”吗
从我现在看到的情况来看,从列表继承可能是一条路。除非我遗漏了什么,唯一不同的是排序方法和复制。其他一切都是一样的。这真的是一个事物的列表,还是你用一个列表来存储一堆事物?在从列表继承之前,为什么不使用列表呢 我试着为真正的is-a关系保留继承权。表单是一个窗口,对话框是一个表单,等等。如果您只是使用A来建模is-implemented,那么只需使用基类,或者使用包含和委派
对于一个不仅仅是列表的人群来说,这是什么呢?这真的是一个事物的列表,还是你用一个列表来存储一堆事物?在从列表继承之前,为什么不使用列表呢 我试着为真正的is-a关系保留继承权。表单是一个窗口,对话框是一个表单,等等。如果您只是使用A来建模is-implemented,那么只需使用基类,或者使用包含和委派
对于一个不仅仅是一个列表的人口来说,有什么意义呢?是的,这很有效。我不得不添加“复制”方法,谢谢,效果很好。我必须添加“复制”方法,谢谢。我会试试这个。I子类总体(列表)。它的一个实例有一个“染色体”类实例的集合,这些实例本身是不可编辑的。但当我尝试“instOfPopulation.pop()”时,我得到了“TypeError:“Chromose”对象不可移植”我真的不知道出了什么问题,子类化还是我的解决方案?最后,fosmark解决方案不起作用吗?在这种情况下,它应该被接受。我仍然无法在人口类上使用'pop()'。当我尝试使用您的方法时,出现了以下错误消息:“文件”C:\Python26\Code\OO.py”,第201行,在pop return self.pop(index)中,并滚动到“超过最大递归深度”。我很困惑,为什么一个列表不会“pop()”它的内容并返回一个错误,即内容本身不可编辑。我是stackoverflow的新手,没有意识到我应该接受答案。我能够按照fosmark的建议对list进行子类化,但仍然无法在填充上实现“pop()”。我很抱歉。我试图使用“extend()”将“pop()”的返回值分配给一个列表,正是这个返回值引发了错误。因此,福斯马克的解决方案奏效了。感谢所有回应的人。我会试试这个。I子类总体(列表)。它的一个实例有一个“染色体”类实例的集合,这些实例是n