【问题标题】:PyCharm f-string usage in a class displays warning (Unresolved attribute reference '__name' for class...)类中的 PyCharm f-string 使用显示警告(类的未解析属性引用“__name”...)
【发布时间】:2018-06-08 07:51:44
【问题描述】:

(代码的简短版本)

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 警告我:类“Animal”的未解析属性引用“__name”

代码仍在按预期工作。 为什么会弹出这个警告?

f-strings 对我和they are also faster 来说似乎是 str.format 的更简洁版本。 PS。由于我是 Python 的新手,请随时提出所有时尚错误或可以和应该做得更好的地方:)

Python 版本:3.6.4 PyCharm 社区版本:2017.3.1

Picture of the code and the error

【问题讨论】:

  • 哦,有趣的是,PyCharm 本身为我提供了对旧代码的“转换为 f 字符串文字”的更正...
  • 我认为你在 PyCharm 中发现了一个错误。它可能是由于在属性名称中使用双下划线而被抛弃,这会调用名称修饰。如果您尝试从其他类访问这些,则需要使用损坏的名称。 (在这种情况下,这实际上可能是错误的:Animal 的子类不需要自己的姓名、性别、身高和体重属性。)
  • 我应该举报吗?
  • 我会举报的。在最坏的情况下,他们什么也不做。

标签: python pycharm


【解决方案1】:

大约一年前有this post,还有this。看来这可能是 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 似乎知道与此问题有关的错误。我会提出来;他们最好能得到更多的信息。

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 2017-10-07
    • 2015-02-03
    • 2020-01-23
    • 2019-01-10
    • 1970-01-01
    • 2015-06-12
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多