如果我的对象不符合条件,我将尝试为类定义条件:
条件:所有器官都是矢量,矢量的形状相同。
当我尝试投射对象时,该函数将返回None
。
那是我到目前为止尝试过的:
class Matrix:
def __init__(self,m1):
dic_len = {}
self.m1 = tuple(m1)
checking = 0
for i in self.m1:
dic_len[len(i)] = 'check'
if type(i) != Vector:
self.m1 = None
checking = 1
if len(dic_len) != 1:
self.m1 = None
if len(dic_len) == 1 and checking == 0:
self.content = self.m1 = tuple(m1)
self.shape = (len(m1),len(m1[0]))
def __repr__(self):
if self.m1 != None:
return "(" + ", ".join(str(i) for i in self.m1) + ")"
else:
return None
但是我得到这个错误:
>>>v1 = Vector([1,2])
>>>v2 = Vector([4,5,6])
>>>m = Matrix([v1,v2])
>>>print(m)
TypeError: __str__ returned non-string (type NoneType)
我希望函数将返回None。
答案 0 :(得分:2)
return str(None)
代替
return None
答案 1 :(得分:1)
__repr__
方法状态的CPython docs状态为
返回值必须是字符串对象。
因此返回None
无效。
>>> class C:
... def __repr__(self):
... return None
...
>>> c = C()
>>> repr(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __repr__ returned non-string (type NoneType)
如果您要与他人共享代码,则最好对__repr__
进行编码以产生其常规输出:
...这看起来应该像一个有效的Python表达式,可以用来重新创建具有相同值的对象(在适当的环境下)...
并重写__str__
以产生表示对象实例有效性的表示形式(尽管注释__str__
也必须返回字符串)。