我試圖圍繞着裝飾我的大腦在Python中,但不明白爲什麼我們不能通過使用子類實現相同的事情?使用裝飾器和通過繼承擴展子類有什麼區別?
回答
你可以用子類實現同樣的事情,事實上你甚至不需要子類 - 你也可以簡單地通過在另一個方法中包裝一個方法並重新分配它來達到同樣的目的。有很多關於裝飾器語法是否應該添加到語言中的討論,因爲它不允許你做任何新的事情,並且要求程序員學習一件新事物。
什麼語法dooes正式化了一個很多人已經使用的模式,並且使它成爲一個標準的語法,它有一個名字和如何使用的指導。您無需使用裝飾器 - 您可以通過其他方式實現相同的效果 - 但使用官方支持的標準方法和簡潔易讀的語法使生活變得更加簡單。
我當然希望OP知道'@spam \ nclass Ham {...} =='class Ham {...};火腿=垃圾郵件(火腿)',只是問爲什麼使用這種模式,而不是使用子類。 – delnan 2010-11-19 21:03:18
你知道,前面加上
@spam class|def name
的定義僅僅意味着「這裏寫的定義名稱,然後綁定name
到spam(name)
」?裝飾者經常應用於功能而不是類。當然,你可以創建一個可調用的類和子類......你也可以實現你自己的整數類型。兩者都不可行。
在相當多的情況下,你propably 可以做到通過繼承......一些非常相似,除了裝飾被定義一次,並且可以適用於幾類,而不是自己在任何情況下寫一個新的子類。每個解決方案都不可避免地會與裝飾者相當或非常相似。
羅伯特指出了一個評論,如果你有一個例子,答案可能是更具體的...
- 1. ,繼承和擴展有什麼區別?
- 2. 繼承和類的擴展有什麼區別?
- 3. 類別和繼承有什麼區別和使用?
- 4. Python裝飾器和裝飾器模式有什麼區別?
- 5. 繼承與類別有什麼區別
- 6. java類繼承和javabean繼承之間有什麼區別?
- 7. Python裝飾器和繼承
- 8. 繼承和裝飾器
- 9. #import和繼承有什麼區別?
- 10. 繼承和java豆有什麼區別?
- 11. 繼承裝飾類
- 12. Python裝飾器和類繼承
- 13. 使用裝飾器並明確調用裝飾器有什麼區別?
- 14. 繼承和擴展類
- 15. 繼承時抽象類和非抽象類有什麼區別
- 16. 裝飾類繼承和類方法
- 17. 通過Fragment超類或擴展Fragment類引用片段有什麼區別?
- 18. maven中的繼承和子模塊概念有什麼區別?
- 19. 子類和子類有什麼區別?
- 20. 如何繼承一個沒有裝飾器的瓶子MethodView類?
- 21. Python繼承:有什麼區別?
- 22. 抽象類和繼承之間有什麼區別?
- 23. 繼承和抽象類有什麼區別?
- 24. UML中的構造型和類繼承有什麼區別?
- 25. 有什麼區別擴展類型和類型
- 26. 用TypeScript中的裝飾器擴展類
- 27. mixin和裝飾器模式有什麼區別?
- 28. Typescript裝飾器與類的繼承
- 29. Selenium核心擴展和Selenium IDE擴展有什麼區別?
- 30. ISAPI擴展:TerminateExtension和擴展析構函數有什麼區別?
你心裏有一個例子嗎? – robert 2010-11-19 20:59:11