class a(str):
def b(self,*x,**y):
print str.decode(self,*x,**y)
b=a()
b.b('utf-8','aaa') # This prints nothing, why?
回答
嘗試首先初始化你的字符串,具有一定的價值:
# classes should have capitalized names ...
class a(str):
def b(self,*x,**y):
print 'debugging: ', self, x, y
print str.decode(self, *x,**y)
if __name__ == '__main__':
b=a('aaa')
b.b('utf-8')
b=a()
b.b('utf-8')
# => output
# debugging: aaa ('utf-8',) {}
# aaa
# debugging: ('utf-8',) {}
#
因爲你初始化b(作爲a的一個對象)而沒有str。
嘗試打印(個體經營,X,Y)。你會看到
('', ('utf-8', 'aaa'), {})
因此,在str.decode(self,*x,**y)
,self
充當空字符串。
是的,總是有幫助的提示... – miku 2010-01-12 11:26:00
當您啓動b1 = a()
,它幾乎一樣b2 = str()
除了b2
沒有a
類的bound method
b()
。因此,當你調用b1.b(...)
,它是與調用print str.decode(b1,...)
或print str.decode(b2, ...)
b1
和b2
是它們都是空字符串的方式相同。現在看看有關str.decode
的文檔。
解碼(...) S.decode([編碼[,錯誤]]) - >對象
Decodes S using the codec registered for encoding. encoding defaults to the default encoding. **errors** may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible values are 'ignore' and 'replace' as well as any other name registerd with codecs.register_error that is able to handle UnicodeDecodeErrors.
這意味着第三個參數(實際上是第二位的bound method
的上下文)是一種錯誤類型,如果它不匹配任何內建(註冊)類型,將被忽略。
所以當你撥打b1.b('utf-8', 'abc')
這將對應b1.b([encoding], [error type])
。 Python會將其翻譯爲print str.decode(b1, [encoding], [error type])
。由於b1
爲空,並且您的「錯誤類型」'abc'
與任何已註冊的錯誤類型都不匹配,因此python只會輸出一個空字符串並忽略給定的「錯誤類型」。
如果您嘗試b = a('hello')
和b.b('utf-8', 'abc')
,您會看到輸出爲hello
,與'abc'
無關。此外,如果您嘗試提供多個參數(如b.b('utf-8', 'abc', 'xyz')
),python將引發錯誤,因爲str.decode()
只能在bound method
的上下文中接受最多兩個參數。
- 1. 爲什麼這段代碼打印0
- 2. 此代碼打印什麼?爲什麼?
- 3. 這爲什麼不打印?
- 4. 這段代碼有什麼問題?爲什麼它打印「1」?
- 5. 爲什麼此代碼不打印「20」?
- 6. 此代碼不打印。爲什麼?
- 7. 爲什麼此代碼不打印?
- 8. 爲什麼不是這個代碼打印我的數組?
- 9. 爲什麼這個代碼不打印字符向後
- 10. 這個例子爲什麼不用ruby代碼打印結果?
- 11. 爲什麼不打印這個循環?
- 12. 這條線打印什麼,爲什麼?
- 13. 爲什麼ClassName打破這個代碼?
- 14. 爲什麼這個Python代碼工作?
- 15. 爲什麼這個python代碼錯了?
- 16. 爲什麼這個python代碼不打開文件?
- 17. 爲什麼我的代碼打印這麼大的數字?
- 18. 這段代碼爲什麼不打印目錄內容?
- 19. 爲什麼這段代碼總是打印「不匹配」?
- 20. 爲什麼這段代碼打印20 20而不是20 10?
- 21. 爲什麼不這段代碼打印文件
- 22. 爲什麼沒有這個代碼打印3
- 23. Python:爲什麼traceback打印?
- 24. 爲什麼python打印[...]
- 25. 此代碼爲什麼打印地址?
- 26. 爲什麼此代碼打印出「0」
- 27. 爲什麼我的代碼打印`os.path`
- 28. 爲什麼此代碼打印兩次?
- 29. 爲什麼我的代碼打印'無'?
- 30. 爲什麼我的Python代碼不能打印任何內容?
非常令人困惑的答案,尤其是考慮到多次出現的「b」。我認爲你的意思是說「作爲一個實例」,可能「以空字符串作爲初始值」或類似的東西。 – 2010-01-12 17:05:34