2015-07-10 96 views
7

我用了很多的Pycharm文檔字符串型分析器以指定類型的方法參數和返回,屬性或實例變量。如果它的工作原理幾乎所有的時間,我有告訴PyCharm我給一個函數或類作爲參數/屬性/有點問題......如何指定文檔字符串類或函數類型PyCharm解析器

下面是一個簡單的例子:

class Bar: 

    def __init__(self, bar): 
     """ 
     :type bar: str 
     """ 
     print bar 

class Foo: 
    """ 
    :type my_class: Bar.__class__ 
    """ 

    def __init__(self, cinstance=Bar): 
     """ 
     :type cinstance: Bar.__class__ 
     """ 
     self.my_class = cinstance 

    def run(self): 
     # it should print an unexpected type warning, but it doesn't. 
     self.my_class(2) 

如果我只是把Bar而不是Bar.__class__,當然PyCharm告訴我Bar不能被調用。那麼如何告訴他我正在給他上課呢?

注意與@classmethod裝飾,PyCharm沒有問題,瞭解我們正在談論的類,而不是實例。

這裏是我的嘗試:

Attempt with <code>Bar.__name__</code>

Attempt with <code>Bar.__class__</code>

Attempt with <code>Bar</code>

+1

JetBrain門票已打開:https://intellij-support.jetbrains.com/hc/en-us/requests/66648 – FunkySayu

回答

2

的PyCharm支持給我講了:

正如PyCharm開發商說:你不能區分類型提示類和實例。類型提示中類的名稱意味着該類的實例是預期的。如果你的函數自己接受這個類,你的選項要麼不使用類型提示,要麼使用'type'作爲類名。無論如何,在這些情況下不會有任何有用的代碼完成。另見https://youtrack.jetbrains.com/issue/PY-11615

指定參數的唯一方法是使用:type arg: type,但完成將無法正常工作。目前沒有其他辦法。

+1

在這種情況下,我通常使用帶參數''的類型:type arg:type [SomeClass]''。它不提供語法幫助,但它是有效的類型提示語法,並且它比「type」更具體。 – warownia1

1

如果要指定一個參數是SomeClass類型的,應宣佈爲:

@type (param): SomeClass 

正確指定,你應該得到這樣的事情:

part 1

如果指定參數的正確類型:

part 2

在這一點上,我我想我會深入一點,看看能否找到有趣的東西。如果你去到一個對象的.__class__的聲明,你會在這裏(沿builtins.py):

part 3

也許__class__設置爲None?即使它是默認的,但當類被實例化時(這將是我的猜測),這可能是PyCharm推斷__class__解決的問題。所有這些僅僅是對我的猜測,也可能是不正確的,但是......僅僅爲了它,如果我們將參數的類型設置爲None,那麼我們會看到什麼行爲?

part 4

貌似當我們設置類型SomeClass.__fake__所發生同樣的事情(和我一起SomeClass.__class__測試它,同樣的事情發生也有。)

,所以我想在這個問題手是,爲什麼你不能使用@type cinstance: Bar

+0

僅供參考,感謝[此答案](http://stackoverflow.com/a/ 22552647/4009370)爲PyCharm支持的文檔樣式 –

+0

我讀了你的答案,但我不知道你有問題:我正在尋找一種方法來傳遞一個類作爲屬性,而不是一個實例作爲屬性。我知道對於一個實例,'@param toto:Bar'沒問題,但是如何告訴「我想作爲一個非實例化類的參數等於或繼承Bar」? – FunkySayu

+0

@FunkySayu我明白了。你嘗試過'.__ name__'還是隻是'class'?另外,如果你碰巧讓'class'工作,我不確定它會做你想做的事情,因爲一個'class'對象不會知道它真正解決了哪個類(對吧?) –

0

對於函數,使用callable指定使用PyCharm。

相關問題