我想创建一个模仿元组类但具有一些额外属性的类,例如自定义新属。
自定义新工作,但我无法弄清楚如何将成员变量与元组继承相结合。
我尝试了许多不同的方法,但我更喜欢发布一个简单的骨架,看看是否有人可以指导我。提前致谢
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]
答案 0 :(得分:1)
tuple
是不可变的,因此创建一个可变子类是没有意义的
答案 1 :(得分:1)
设置self.x = args[0]
并不意味着更改self.x
将更新元组值。元组本身仍然是不可变的,self.x
是一个完全独立的数据。
您可以编写一个方法或属性,通过使用元组数据来查找其值,但是在创建元组之后,您无法更改基础元组数据。如果你想要一些可变的东西,不要从元组继承。