默认情况下如何从类返回列表而不是字符串?

时间:2016-05-31 08:21:17

标签: python class

loadRequest

上面的代码打印出“Hello”,因为返回了一个字符串。 但是我想默认返回一个列表。就像我写道:

class A:
    def __init__(self, message):
        self.message = message

    def __repr__(self):
        return self.message

print A("Hello")

上面的代码给出了一个错误 TypeError:__str__返回非字符串(类型列表)

无法创建类的对象,因为我需要将其作为异常来处理。像:

class A:
    def __init__(self, message):
        self.message = message

    def __repr__(self):
        mylist = [self.message]
        return mylist

print A("Hello")

有没有办法退回清单?

3 个答案:

答案 0 :(得分:4)

__str____repr__方法必须返回字符串。你必须制作一个自定义的getter函数。

例如:

class A:
    def __init__(self, message):
        self.message = message

    def get_message_as_list(self):
        return [self.message]

my_object = A("Hello")
print(my_object.get_message_as_list())

正如jonrsharpe所说,你不能真正使用魔法(双重强调)方法。

答案 1 :(得分:3)

这是一个坏主意。 __repr__应该总是返回一个str,因为它被很多内部使用(就像你在print中看到的那样)。有关信息,请阅读:https://docs.python.org/3/reference/datamodel.html#object.repr

答案 2 :(得分:0)

这只是个好玩的主意。我正在使用调用返回非字符串输出。在下面的示例中,为元组。

class MyClass:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __add__(self, other):
        new_x = self.x + other.x
        new_y = self.y + other.y
        return MyClass(new_x, new_y)
    def __repr__(self):
        return "({},{})".format(self.x, self.y)
    def __call__(self):
        return (self.x, self.y)

输出:

>>> m1 = MyClass(10, 20)
>>> m1
(10,20)
>>> m1()
(10, 20)
>>> type(m1())
<type 'tuple'>