在Python中,是否可以接受一個類並刪除它的一個成員函數?即:A類有7個成員職能。其他五個類繼承自A類。現在,假設其中一個類不需要類A的成員函數之一。有沒有辦法讓這個功能保持顯示?Python更改類功能
2
A
回答
1
現在,假設這些類的一個不希望的類A的成員 功能之一。有沒有辦法讓這個功能保持顯示?
__dir__ method可讓您控制哪些方法「顯示」。它不會禁用該方法,它只是允許您控制所看到的內容。
理想的情況下,這種努力應該通過重寫問題的方法,並讓它提高NotImplementedError陪同(例如,這是Python的collections.Counter.fromkeys()方法所使用的方法。
根據不同的方法,也有其他的方法禁用它。例如,一個繼承__hash__方法可以通過將其設置到無禁用(例如這是一種利用在集合抽象基類如collections.Mapping的方法)。
0
一般來說,你不應該刪除子類中的一部分基類的API。這是因爲一個o f繼承點是子類的實例是基類的實例。如果他們缺少方法,東西可能會以尷尬的方式破裂。
也就是說,重寫一個繼承的方法以及在調用不合適時引發異常是偶爾適當的。這可能只有當參數不是子類所需要的,但在某些情況下,它可能適用於所有的調用。儘管如此,嘗試使異常很有幫助,因爲在調用記錄的方法時,程序員得到意想不到的AttributeError
或其他常見錯誤是沒有意義的。
下面是一個覆蓋其超類的一部分API以禁止其使用的子類的示例。請注意,我使用的是getter和setter方法,這些方法通常不是很Pythonic,但容易理解(最好是使用property
s)。
的基類:
class Rectangle(object):
def __init__(self, width, height):
self._width = width
self._height = height
def get_width(self):
return self._width
def set_width(self, value):
self._width = value)
def get_height (self):
return self._height
def set_height (self, value):
self._height = value)
def area(self):
return self.get_width() * self.get_height()
而且一個子類:
class Square(Rectangle):
def __init__(self, side):
self._side = side
def get_side(self):
return self._side
def set_side(self, value):
self._side = value
get_width = get_height = get_side
def set_width(self, value):
raise TypeError("Squares cannot have their sides changed individually")
set_height = set_width
的area
方法是繼承的,仍然按預期工作在Square
類,爲矩形,只有呼叫將其他代碼一個實例的getter方法,而不是setter方法。
相關問題
- 1. jquery - 更改類功能
- 2. 更改功能
- 3. 更多功能python
- 4. Python更多功能
- 5. 功能爲Python類
- 6. jquery更改功能
- 7. 更改love.load功能
- 8. 更改功能打
- 9. 更改球功能
- 10. AJAX更改功能
- 11. 修改類功能
- 12. jquery通過更改類更改鏈接的鏈接功能
- 13. Python的改變功能
- 14. 類似功能strcmpi在python
- 15. Python的分類功能
- 16. 將if語句更改爲Python + Selenium中的更多功能
- 17. 更改顏色的功能
- 18. 更改功能模塊
- 19. 更改按鈕的功能
- 20. 如何更改的功能
- 21. 更改功能頁面
- 22. 更改默認功能django
- 23. 即時更改javascript功能
- 24. 更改密碼功能
- 25. 更改SugarCRM搜索功能
- 26. 更改現有功能
- 27. 將功能更改爲PDO
- 28. 使功能更改密碼
- 29. 更改onclick onhover功能?
- 30. 更改wordpress插件功能
聽起來更像是你需要商定現有的實現 – Bryan 2013-04-21 00:46:41
重新考慮您的實現/設計比淤泥,這不是專門在Python支持,因爲你不應該擺在首位那樣做! – jamylak 2013-04-21 00:48:53
@jamylak問題是,頂部的答案實際上是錯誤的... – JBernardo 2013-04-21 00:50:43