Python中覆盖列表构造函数

3

假设我想在Python中实现某些附带结构的列表类,例如一个新的构造函数。 我写道:

import random

class Lis(list):
    def __init__(self, n):
        self = []
        for i in range(n):
            self.append(random.randint(0, 30))

现在执行Lis(3),返回一个空列表。我不知道哪里做错了。

2个回答

2
您正在覆盖对象,使用self = []。请尝试以下操作。
import random

class Lis(list):
    def __init__(self, n):
        for i in range(n):
            self.append(random.randint(0, 30))

谢谢您的快速回答,您太快了,我暂时无法接受您的答案 :) - InfiniteLooper
1
super().__init__() - albar
也许您的答案是最普遍适用的。@James的答案看起来有点棘手。也许我错了。 - InfiniteLooper

0

如果你想从对象调用中返回一个列表

class MyClass(object):
    def __init__(self):
        print "never called in this case"
    def __new__(cls):
        return [1,2,3]

obj = MyClass()
print(obj)

如何在Python中从__init__返回值?

或者如果你想要一个修改后的对象,可以尝试:

class MyClass:
    def __getitem__(self, key):
        not_self = []
        for i in range(n):
            not_self.append(random.randint(0, 30))
        return not_self
myobj = MyClass()

myobj[3] #Output: 6

如何在Python中覆盖[]运算符?

我不确定像你这样使用self是否健康。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接