Che*_*uCR 5 operator-overloading recordset python-2.7 odoo odoo-8
我已经做了一些测试:
>>> empty_recordset = self.env['res.users'] # empty recordset
>>> not_empty_recordset = self.env['res.users'].search([('id', '=', 1)]) # recordset with one record
>>> empty_recordset is False
False
>>> empty_recordset is None
False
>>> empty_recordset == False
False
>>> empty_recordset == True
False
>>> bool(empty_recordset)
False
>>> not empty_recordset
True
>>> if empty_recordset: # it is treated as False
... print('hello')
...
>>> bool(not_empty_recordset)
True
>>> if not_empty_recordset:
... print('hello')
...
hello
>>> not not_empty_recordset
False
Run Code Online (Sandbox Code Playgroud)
bool()
,返回True
或False
。if
和not
语句,结果也是预期的。is
,==
,!=
是不是预期的结果。怎么了?仅通过if
and not
语句将记录集视为布尔值吗?其余的操作员是否不超负荷?
小智 3
__nonzero__
其实现方式是这样的:
调用以实现真值测试和内置操作bool();应该返回 False 或 True,或者它们的整数等效值 0 或 1。如果未定义此方法,则调用len ()(如果已定义),并且如果其结果非零,则该对象被视为 true。如果一个类既没有定义len () 也没有定义nonzero (),则它的所有实例都被认为是 true。
对于 Odoo 10,代码是:
def __nonzero__(self):
""" Test whether ``self`` is nonempty. """
return bool(getattr(self, '_ids', True))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
85 次 |
最近记录: |