首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python类中的变量列表参数

Python类中的变量列表参数
EN

Stack Overflow用户
提问于 2014-05-07 22:46:21
回答 2查看 70关注 0票数 0

我试图使用变量参数列表来创建一个类,代码是:

Vector.py类代码:

代码语言:javascript
运行
复制
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代码:

代码语言:javascript
运行
复制
from Vector import Vector


def main():
    'We create 2 Vectors'
    V1 = Vector((3, 2))
    V2 = Vector((4, 5))
    print(V1)
    print(V2)

当我执行代码时,我只获得一条白线,没有任何错误消息。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 23:13:33

因此,似乎与您指定论点的方式有些混淆。

你用:

代码语言:javascript
运行
复制
def __init__(self, *V):

这意味着(连同问题的标题)您想要提供一个可变数量的参数,例如:

代码语言:javascript
运行
复制
V1 = Vector(3, 2)
V2 = Vector(1,2,3,4,5,6,7)

然而,您正在将元组传递给Vector,如:

代码语言:javascript
运行
复制
V1 = Vector((3, 2))
V2 = Vector((1,2,3,4,5,6,7))

这不是一个变量参数列表,它只是一个参数,不管元组有多长。

正如在上面的注释中所指出的,重载的__repr__方法已被破坏,并将导致代码无限递归。没有必要重载此方法,因为默认方法完全按照您的要求执行。

将所有这些放在一起,您的代码将变成:

代码语言:javascript
运行
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2014-05-07 22:58:10

删除__repr____new__,您的代码就会正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23529780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档