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 无法编辑它。
【问题讨论】:
rut
是 Tk
的一个实例。 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 + Click
或Ctrl + Click
(取决于您的平台) 在rut = Tk()
中的Tk()
上打开类定义。您会在最后看到添加的内容。
@property
def w(self):
return self._w
【讨论】:
你能解释一下 add property for field 的作用吗? 请看我的解释。 哇,添加到 IDE 中的功能真的很愚蠢...以上是关于Python - “为字段添加属性”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章