1
A
回答
3
在Python 3.x中,它是__bool__
或__len__
:
object.__bool__(self)
調用,以實施真值測試和內置操作
bool()
;應該返回False
或True
。如果定義的方法不是 ,則調用__len__()
(如果已定義),並且對象爲 (如果其結果不爲零),則認爲該對象爲真。如果一個類既沒有定義__len__()
也沒有定義__bool__()
,它的所有實例都被認爲是真的。
在2.x中它被命名爲__nonzero__
;見what's new in 3.0。
0
任何對象都可以用於真值進行測試,用於在
if
或while
條件或如下的布爾運算的操作數使用。下面的值被認爲是假的:
- (...)
- 任何空序列,例如,
''
,()
,[]
。- (...)用戶定義的類的
- 情況下,如果類定義了一個
__bool__()
或__len__()
方法中,當該方法返回整數零或bool
值False
。 [這些特殊方法的其他信息可以在Python的參考手冊(Basic customization)中找到。]所有其他值被認爲是真實的 - 這麼多類型的對象總是如此。
操作和內置功能有一個布爾結果總是返回
0
或False
假,1
或True
真正的,除非另有說明。 (重要的例外:布爾運算or
和and
總是返回自己的一個操作數)
0
是的,__len__
確實在這種情況下被調用。
讓我們來看看這個代碼片斷:
class clist(list):
def __len__(self):
print "Called"
Q = clist([1,2,3,4])
while Q:
break
輸出:
Called
Traceback (most recent call last):
File "a.py", line 10, in <module>
while Q:
TypeError: an integer is required
但是,如果我刪除方法,
class clist(list):
pass
Q = clist([1,2,3,4])
while Q:
break
的代碼將運行得很好,但韓元不打印任何東西。
所以是的,__len__
確實被調用。
相關問題
- 1. 如何驗證內容更改的集合的方法調用?
- 2. jQuery驗證插件的方法在調用空集合時拋出錯誤
- 3. Jquery驗證:在另一種方法內調用驗證方法
- 4. Mockito驗證方法調用
- 5. Symfony2 - 集合上的回調驗證器
- 6. Jquery驗證:從自定義驗證方法調用equalTo方法
- 7. 使用Moq驗證集合中的項目的方法
- 8. 創建用戶驗證錯誤的方法與aldeed集合
- 9. 驗證集合實例方法在Rspec的
- 10. 在AsyncTask中驗證方法調用
- 11. 用戶驗證的合適方法
- 12. 使用Dataannotations驗證集合
- 13. Struts2集合驗證
- 14. Backbone.js驗證集合
- 15. 方法調用的驗證順序
- 16. Javascript驗證的方法調用onLoad()
- 17. Struts2調用方法的xml驗證
- 18. __getstate__方法在酸洗集合的子類時不被調用
- 19. 調用集合中的方法
- 20. 如何在保證存在的集合中調用通用類型的方法?
- 21. 使用Moq驗證方法調用
- 22. Moq在調用方法時驗證屬性
- 23. 如何驗證時間集合?
- 24. jQuery驗證無法調用未定義的方法「調用」
- 25. 如何在方法調用後驗證方法參數?
- 26. 驗證的Mockito方法無法檢測方法調用
- 27. Struts驗證器註釋調用方法
- 28. Mockito驗證方法調用一次
- 29. 如何驗證方法被調用
- 30. jQuery驗證不能調用方法
爲什麼會是'len'?而'len'並不是列表中的一種方法。 '__len__'將是方法。 – Carcigenicate
@Carcigenicate它實際上是__ len __。編輯器將「__」轉換爲粗體。感謝您的警告 –
啊。將反斜槓中的小碼位包起來以防止標記嘗試是一個好主意。但是,爲什麼要提及'__len__'?它可能在幕後調用,但在這段代碼片段中,「pop」是被調用的方法。 – Carcigenicate