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")
有没有办法退回清单?
答案 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'>