【问题标题】:Python - what does "add property for the field" do?Python - “为字段添加属性”有什么作用?
【发布时间】:2018-03-08 16:30:40
【问题描述】:

我正在用 pycharm 开发一个 python 程序。在我的这行代码下:

rut = Tk()
rut.tk.call('wm', 'iconphoto', rut._w, PhotoImage(file=icon_file))

我收到关于“rut._w”的警告说:

访问一个类的受保护成员 _w

当我按下 ctrl + enter 时,它给了我一个选项:

为字段添加属性

当我点击它时,它会将行更改为:

rut.tk.call('wm', 'iconphoto', rut.w, PhotoImage(file=icon_file))

但我知道这并不是它的全部功能,因为如果我手动更改名称,我会得到:

AttributeError: '_tkinter.tkapp' 对象没有属性 'w'

那么这里发生了什么? _w 是什么意思,.w 是什么意思?为字段添加属性是什么意思?它实际上是如何完成的?

请注意,Tk 是从 tkinter 包中导入的,它不在我的项目文件中,所以我想 pycharm 无法编辑它。

【问题讨论】:

  • rutTk 的一个实例。 PyCharm 似乎在 Tk 类的源代码中为 Tk 实例定义了一个 w 属性。
  • Tk 是从 tkinter 包中导入的,它不在我的项目文件中,所以我想 pycharm 无法编辑它。(对不起,我应该在问题中澄清这一点。我现在会)@OluwafemiSule跨度>
  • Pycharm 将属性更改为w 时,您的应用程序是否运行成功? AFAIK,TK doesn't have a w attribute defined 如果您的应用程序运行成功,您一定知道 Pycharm 正在对其进行猴子修补。请参阅我的回答,了解如何避免使用私有属性
  • @OluwafemiSule 是的,它运行成功。

标签: python tkinter pycharm protected


【解决方案1】:

__str__ method defined for Tk returns self._w 它是私有财产的吸气剂。

你可以使用:

rut.tk.call('wm', 'iconphoto', str(rut), PhotoImage(file=icon_file))


Pycharm 正在做的是将其添加到Tkinter 类。这很糟糕,因为您的应用程序保证可以在您的机器上运行,但不能在 Tkinker 类没有如此修补的其他机器上运行。

Cmd + ClickCtrl + Click (取决于您的平台)rut = Tk() 中的Tk() 上打开类定义。您会在最后看到添加的内容。

@property
def w(self):
    return self._w

【讨论】:

  • 你能解释一下 add property for field 的作用吗?
  • 请看我的解释。
  • 哇,添加到 IDE 中的功能真的很愚蠢...
猜你喜欢
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2017-03-07
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
相关资源
最近更新 更多