我想创建一个模仿元组类但具有一些额外属性的类,例如自定义新类。Python自定义新分类元组
自定义的新作品,但我想不出如何将成员变量与元组继承。
我尝试了很多不同的方法,但我更喜欢张贴一个简单的骨架,看看有人能指导我。由于事先
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)作为意图。
UPDATE:
它不是用一个元组来做到这一点的答案澄清一个好主意。尽管如此,如果有一种方法可以与列表完成相同的目的,那么它将非常有帮助。
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]
你确定你打算在这里设置'tupla.y'吗?运行'a = tupla(2);打印tupla.y'看我的意思 – Eric
我很惊讶,为什么会这样呢? –
因为'__new__'需要'cls'作为它的第一个参数,而不是'self',所以你实际上在类 – Eric