在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. 更改love.load功能
- 7. 更改球功能
- 8. 更改功能打
- 9. AJAX更改功能
- 10. jquery更改功能
- 11. 修改類功能
- 12. Python的改變功能
- 13. Python的分類功能
- 14. jQuery,更改運行功能
- 15. 更改默認功能django
- 16. 如何更改的功能
- 17. 更改功能範圍
- 18. 即時更改JavaScript功能?
- 19. 使功能更改密碼
- 20. 更改SugarCRM搜索功能
- 21. 更改圖片庫功能
- 22. 更改密碼功能
- 23. Rails:更改_destroy功能?
- 24. 複製和更改功能
- 25. 更改枚舉的功能
- 26. 的Javascript切換功能:更改文本,改變類樣式
- 27. python:更改類的打印
- 28. python:更改sys.stdout打印到自定義打印功能
- 29. Python Globalling在許多功能中使用和更改
- 30. 功能如何管理內容類型字段更改?
聽起來更像是你需要商定現有的實現 – Bryan 2013-04-21 00:46:41
重新考慮您的實現/設計比淤泥,這不是專門在Python支持,因爲你不應該擺在首位那樣做! – jamylak 2013-04-21 00:48:53
@jamylak問題是,頂部的答案實際上是錯誤的... – JBernardo 2013-04-21 00:50:43