Python使用自定义新子类化子元组

时间:2015-10-14 15:53:54

标签: python tuples subclassing

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

自定义新工作,但我无法弄清楚如何将成员变量与元组继承相结合。

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

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]

2 个答案:

答案 0 :(得分:1)

tuple是不可变的,因此创建一个可变子类是没有意义的

答案 1 :(得分:1)

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

您可以编写一个方法或属性,通过使用元组数据来查找其值,但是在创建元组之后,您无法更改基础元组数据。如果你想要一些可变的东西,不要从元组继承。