我试图使用变量参数列表来创建一个类,代码是:
Vector.py类代码:
class Vector(tuple):
def __new__(cls, *V):
return tuple.__new__(cls, V)
def __init__(self, *V):
self.V = V
def __repr__(self):
"""An overloaded method that it writes a vector in a terminal."""
return('({})'.format(self))TestVector.py代码:
from Vector import Vector
def main():
'We create 2 Vectors'
V1 = Vector((3, 2))
V2 = Vector((4, 5))
print(V1)
print(V2)当我执行代码时,我只获得一条白线,没有任何错误消息。
谢谢
发布于 2014-05-07 23:13:33
因此,似乎与您指定论点的方式有些混淆。
你用:
def __init__(self, *V):这意味着(连同问题的标题)您想要提供一个可变数量的参数,例如:
V1 = Vector(3, 2)
V2 = Vector(1,2,3,4,5,6,7)然而,您正在将元组传递给Vector,如:
V1 = Vector((3, 2))
V2 = Vector((1,2,3,4,5,6,7))这不是一个变量参数列表,它只是一个参数,不管元组有多长。
正如在上面的注释中所指出的,重载的__repr__方法已被破坏,并将导致代码无限递归。没有必要重载此方法,因为默认方法完全按照您的要求执行。
将所有这些放在一起,您的代码将变成:
class Vector(tuple):
def __new__(cls, *V):
return tuple.__new__(cls, V)
def __init__(self, *V):
self.V = V
def main():
'We create 2 Vectors'
V1 = Vector(3, 2)
V2 = Vector(4, 5)
print(V1)
print(V2)
main()剩下的唯一问题是,为什么要在元组的子类中这样做,而不是使用(例如) numpy。
发布于 2014-05-07 22:58:10
删除__repr__和__new__,您的代码就会正常工作。
https://stackoverflow.com/questions/23529780
复制相似问题