【问题标题】:pyCharm refactoring python class attribute name, does not rename all attribute usagespyCharm重构python类属性名,不重命名所有属性用法
【发布时间】:2018-10-24 00:54:00
【问题描述】:

考虑以下几点:

class test:
    att = 7


def print_class(class_instance):
    print(class_instance.att)


if (__name__ == '__main__'):
    t = test()
    print_class (t)

print_class 需要一个类 test 实例作为参数,但这不是类型的。

现在我想通过重构 att 来重命名 不过,

打印(class_instance.att

不会被重命名,因为编辑器不知道这是同一个属性。 这只会在运行时被发现。

有没有办法克服这个问题?

【问题讨论】:

  • 您可以使用类型提示(作为注释或在文档字符串中)来告诉 PyCharm 您的期望:jetbrains.com/help/pycharm/type-hinting-in-product.html
  • @jonrsharpe 在这种情况下甚至一个文档字符串就足够了
  • @DeepSpace 文档字符串是一种种类的类型提示,根据我的评论和我链接到的文档。
  • @jonrsharpe 。不确定我是否完全理解,所有表单上的类型提示都被编辑器用于编码目的。解释器不使用它们。我说的对吗?
  • 奇怪的是,当它是一种方法时,重构有效,但它不适用于属性。你@jonrsharpe 知道为什么吗?

标签: python refactoring renaming class-attribute


【解决方案1】:

正如@jonsharpe 在 cmets 中建议的那样,类型提示将解决此问题。

但是,如果您不想使用类型提示,则可以使用将类型附加到 class_instance 的文档字符串:

class test:
    att = 7


def print_class(class_instance):
    """

    :param test class_instance:
    #       ^ specify type here
    :return:
    """
    print(class_instance.att)


if (__name__ == '__main__'):
    t = test()
    print_class(t)

重构后:

class test:
    attribute = 7


def print_class(class_instance):
    """

    :param test class_instance:
    :return:
    """
    print(class_instance.attribute)


if (__name__ == '__main__'):
    t = test()
    print_class(t)

【讨论】:

  • 我没有意识到这一点。不确定我是否完全理解,所有形式的类型提示都被编辑器用于编码目的。我说的对吗?
  • 很有趣,但是如果我在许多功能中都有使用,这并不能解决问题。在所有这些中执行此操作将花费大量时间。即使是非常简单的函数也必须添加文档字符串也很烦人。
  • 我编辑了问题以包括如何使用类型提示,它比文档字符串更简洁,但仍然需要在每次使用时都这样做。
猜你喜欢
  • 1970-01-01
  • 2019-11-25
  • 2012-07-25
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2015-04-21
相关资源
最近更新 更多