2014-11-05 98 views
0

我使用Python進行編碼,但問題似乎與編程語言無關。OOP:依賴於類 - 子類合同中的受保護屬性

我有一個代表一些系統檢查類:

class Check: 
    @abstractmethod 
    def run() 
    """ You have to define your own run(). As a result, it must set self._ok. """ 
     ... 

    @property 
    def is_ok(): 
     return self._is_ok 

然後我們有一組由子類檢查類的檢查,他們正在以下列方式(簡體)使用:

class Checker: 
    checks = [check1, check2...] 

    def __call__(self): 
     for check in self.checks: 
      if not check.is_ok: 
       alarm() 

現在的問題是:是否要求子類設置一些受保護的對象屬性?

+0

這可能更適合(也可能已經回答)程序員.stackexchange.com – jonrsharpe 2014-11-05 11:20:25

回答

0

我想這可能是可以接受的。

您也可以考慮讓子類實現自己的is_ok()方法,而不是修改受保護的屬性,以便他們可以實現自己的檢查策略。

+0

我的擔心是:向孩子講解是不是太過分了,是不是太難以驗證如果孩子班適合這份合同? – user3201924 2014-11-05 12:19:01

+0

我不認爲這將很難驗證:如果初始化基類中的值,則檢查將失敗,除非該屬性相應地被修改,否則您可能會將其保留爲未定義狀態,並檢查它是否設置爲false或true在run()中。我想說,如果你需要把它帶給別人,那麼讓它們實現is_ok()方法可能會更好,否則它會被接受,因爲你不需要擔心如何正確記錄它以及如何檢查。 – Giordano 2014-11-05 13:28:47