Python子类化tuple

Python子类化tuple,python,tuples,subclassing,Python,Tuples,Subclassing,我想创建一个模仿元组类但具有一些额外属性的类,例如自定义新类 自定义的新方法可以工作,但我不知道如何将成员变量与元组继承相结合 我尝试了许多不同的方法,但我更喜欢只发布一个简单的骨架,看看是否有人可以指导我。提前谢谢 class tupla(tuple): x = 0 y = None def __new__(self, *args): if len(args)==1: self.y = args[0] if

我想创建一个模仿元组类但具有一些额外属性的类,例如自定义新类

自定义的新方法可以工作,但我不知道如何将成员变量与元组继承相结合

我尝试了许多不同的方法,但我更喜欢只发布一个简单的骨架,看看是否有人可以指导我。提前谢谢

class tupla(tuple):
    x = 0
    y = None

    def __new__(self, *args):

        if len(args)==1:
            self.y = args[0]

        if len(args)==2:
            self.x = args[0]
            self.y = args[1]        

        return tuple.__new__(tupla, ( self.x, self.y))


a = tupla(2)
print a

a.x = 1
print a
输出当然是,

(0,2)

(0,2)

而不是预期的(1,2)

更新:

当答案澄清时,使用元组来实现这一点不是一个好主意。然而,如果有一种方法可以达到同样的目的,例如列表,这将非常有用

class lista(list):
    x = 0
    y = None

    def __init__(self,*args):
        print 'init'

        if len(args)==1:
            self.y = args[0]

        if len(args)==2:
            self.x = args[0]
            self.y = args[1]

        super(lista,self).__init__( [self.x, self.y] )

a = lista(2)
print a
a.x = 1
print a
现在输出是

[0,2]


[0,2]

tuple
s是不可变的,因此设置
self.x=args[0]
并不意味着更改
self.x
将更新tuple值。元组本身仍然是不可变的,
self.x
是一段完全独立的数据


您可以编写一个方法或属性,通过使用元组数据来查找其值,但无法在元组创建后对底层元组数据进行更改。如果您想要可变的内容,不要从tuple继承。

您确定要在此处设置
tupla.y
?运行
a=tupla(2);打印tupla.y
看看我的意思我很惊讶,为什么会这样?因为
\uu new\uuuu
cls
作为它的第一个参数,而不是
self
,所以你实际上是在类true上设置属性,我只是想知道如果我有这个tupla类的列表[a,b等],它会显示为[(x,y),(x,y),等等]而不是[@PabloRiera那么为什么不使用呢?它有一个合理的
\uuuu repr\uuuu
实现(这决定了它在容器中的显示方式)。很好,这似乎是最好的解决方案