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
实现(这决定了它在容器中的显示方式)。很好,这似乎是最好的解决方案