2017-12-27 788 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似乎知道有关此问题的错误。我会提起它;这对他们获得更多信息会有好处。