Python:如何用一些已知的值初始化 OOP 列表?

标签 python oop

我正在尝试进入面向对象编程,但在一些可能非常简单的事情上卡住了。我想要一个对象,它是一个列表,但首先要将一些值传递给它。

例子:

class superList(list):
    def __init__(self,startingValues):
        self = startingValues

myList = superList([1,2,3])
myList.append(4)
print(myList)

我希望它的输出是 [1,2,3,4]。如果有人能提供帮助,我将不胜感激!

最佳答案

分配给 self 没有用;您只是分配给一个在 __init__ 返回后消失的本地名称。相反,您需要使用 __new__,并调用父类的 __new__ 方法。

class SuperList(list):
    def __new__(cls, starting_values):
        return list.__new__(cls, starting_values)

另一种方法是使用 __init__,并在适当的位置附加值:

class SuperList(list):
    def __init__(self, starting_values):
        self.extend(starting_values)

不过,正如评论中所指出的,如果不重写任何一种方法,您将获得完全相同的结果:

class SuperList(list):
    pass

因为除了在任一方法中调用父类行为外,您没有做任何事情。在没有定义的 SuperList.__new__ 的情况下,例如,SuperList([1,2,3]) 只是调用 list.__new__(SuperList, [1 ,2,3]) 无论如何。

更有趣的是,类本身(至少,部分)决定了使用调用者传递的值之外的行为。例如:

class SuperList(list):
    def __init__(self, starting_values):
        self.extend([2*x for x in starting_values])

    def __init__(self):
        self.extend([1,2,3])

关于Python:如何用一些已知的值初始化 OOP 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129617/

相关文章:

python - 对一个对象执行某些操作会对同一类的所有对象执行相同的操作吗?

objective-c - 在 Objective-C 中在另一个自定义类中使用自定义类

c++ - 继承一个类,该类也继承与该类相同的基类

java - 在 Java 中创建对象后编辑对象的方法

python - python multiandas排序后的 Pandas groupby不正确

Python Pandas - 如何使用 to_dict() 将 sort_values 输出转换为字典

python - 阅读文档构建 : cmake/swig are not available

python - 尽可能短的路线,从任何地方开始和结束

python - 将 Pandas 中的 GMT 转换为本地时区

php - 访问 PHP 类常量