2014-03-13 17 views
1

是否可以傳播類型提示重寫方法?重寫方法的類型提示傳播

說,我有以下類:

class Student: 
    def study(): 
     pass 

class Option: 
    self.option_value 

class BaseChoice: 
    def make_choice(self, student, options): 
     """ 
     :type student: Student 
     :type options: list[Option] 
     """ 

class RationalChoice(BaseChoice): 
    def make_choice(self, student, options): 
     pass 

當我在裏面RationalChoice.make_choice pycharm不會爲options屬性/方法提示自動完成,但它選擇正確的提示爲student。顯而易見的解決方法是隻複製文檔字符串,但我會有幾十個不同的BaseChoice後代,所以這是不實際的。

我使用PyCharm 3.1.1,社區和專業版本都受到影響。

這是python本身完全缺失的東西,還是僅僅在PyCharm中?

+0

我還使用PyCharm 3.1.1,我得到酒吧的內部make_foo_from_bar方法的建議。如果你從一個新項目開始,是否會發生同樣的問題? –

+0

沒關係,看起來你的例子是關閉的--PyCharm推斷'bar'是Bar類型,即使沒有任何提示。 –

+0

看起來我已經簡化了它,我會在一分鐘內更新這個問題。 – J0HN

回答

1

PyCharm在重寫方法時不會查看超類型提示。我不知道這是一個錯誤還是一個特性,儘管我傾向於後者:Python不需要重寫方法具有相同的簽名或接受與它們重寫的方法相同的類型。換言之,在BaseChoice上輸入提示不會自動爲RationalChoice生效。

PyCharm做了什麼,看起來讓你感到困惑的是快速猜測,並決定Student對於名爲student的參數是一個明智的類。沒有類Options,所以啓發式失敗。

所以,如果你真的,真的想要類型提示,真的沒有其他選擇指定他們在你想要的地方。

如果您正在使用Python 3,你可以嘗試新的語言類型提示(註釋)語法:

class RationalChoice(BaseChoice): 
    def make_choice(self, student: Student, options: list): 
     return 
相關問題