Python - “为字段添加属性”有啥作用?

Posted

技术标签:

【中文标题】Python - “为字段添加属性”有啥作用?【英文标题】: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 是的,它运行成功。 【参考方案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 中的功能真的很愚蠢...

以上是关于Python - “为字段添加属性”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的 slice() 函数有啥作用?

python的“re.compile”有啥作用?

Python中的“ @”(@)符号有啥作用?

% 对 Python 中的字符串有啥作用?

为啥将 python 命令分配给 sh var?这个文件有啥作用? [关闭]

python对股票分析有啥作用