定义分类条件

时间:2018-12-06 11:30:45

标签: python

如果我的对象不符合条件,我将尝试为类定义条件:

条件:所有器官都是矢量,矢量的形状相同。

当我尝试投射对象时,该函数将返回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。

2 个答案:

答案 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__也必须返回字符串)。