2017-12-27 893 views
0

(代碼短版)PyCharm F-字符串使用(未解決屬性引用 '__name' 類...)

class Animal: 
    __name = "" 
    __gender = "unknown" 
    __height = 0 
    __weight = 0 
    __hungry = False 

    def __init__(self, name, gender, height, weight): 
     self.__name, self.__gender, self.__height, self.__weight = name, gender, height, weight 

    def toString(self): 
     return f'{self.__name} is a {self.__gender}, {self.__height} m tall and weights {self.__weight} kg.' 

PyCharm警告我:未解決的屬性引用 '__name'對於類「動物」

該代碼仍按預期工作。 爲什麼會彈出此警告?

f-strings對我來說似乎是str.format的更清晰版本,they are also faster。 PS。由於我是新手到Python,請隨時帶出所有的時尚錯誤或什麼可以和應該做的更好:)

Python版本:3.6.4 PyCharm社區版本:2017年3月1日

Picture of the code and the error

+0

呵呵,有趣的是,PyCharm本身爲我提供了一個更正「轉換爲f-字符串」的舊代碼... – Estonian

+1

您已經在PyCharm中發現了一個錯誤,我想。它可能是通過在你的屬性名稱中使用雙下劃線來拋出的,這會引發名稱混亂。如果您嘗試從其他課程訪問這些課程,則需要使用重名的名稱。 (在這種情況下,實際上可能是錯誤的:「Animal」的子類不需要自己的名字,性別,身高和體重屬性。) – kindall

+0

我應該報告嗎? – Estonian

回答

0

從大約一年前有this postthis。這似乎可能是PyCharm的一個問題。

但是,如果您刪除f字符串中的雙下劃線,則linter不會再抱怨。

使用dunder前綴屬性調用''.format()似乎也不會產生錯誤或警告。

正如@kindall上面所述,prefixing with the double underscore調用名稱修改。

class Animal: 
    __X = 'y' 

    def __init__(self, name="", gender="", height=0, weight=0, hungry=False): 
     self.name = name 
     self.gender = gender 
     self.height = height 
     self.weight = weight 
     self.hungry = hungry 

    def to_string(self): 
     return f'{self.name} is a {self.gender}, {self.height} m tall and weights {self.weight} kg.' 

    def to_string_format(self): 
     return '{}'.format(self.__X) 

另外they似乎知道有關此問題的錯誤。我會提起它;這對他們獲得更多信息會有好處。