扩展对象时使用self的原因(Python)
假设我正在扩展一个名为Frame的对象(位于“tkinter”中),如下所示扩展对象时使用self的原因(Python),python,object,self,extending,Python,Object,Self,Extending,假设我正在扩展一个名为Frame的对象(位于“tkinter”中),如下所示 class GraphRegion(Frame): def __init__(self, master): Frame.__init__(self,master) 现在,我知道为什么需要“大师”。为什么Frame.\uuuu init\uuuu需要“自我”?“self”不是指GraphRegion吗?这到底是什么在告诉对象“框架”?是否将GraphRegion创建为类型“Frame”?因为F
class GraphRegion(Frame):
def __init__(self, master):
Frame.__init__(self,master)
现在,我知道为什么需要“大师”。为什么Frame.\uuuu init\uuuu需要“自我”?“self”不是指GraphRegion吗?这到底是什么在告诉对象“框架”?是否将GraphRegion创建为类型“Frame”?因为
Frame.\uuu init\uuu
是一个未绑定的方法
只有在实例上查找方法才能生成绑定方法,有一个实例要绑定到self
。因为Frame.\uuuu init\uuuu
是未绑定的,所以需要显式地传入第一个参数,即实例
否则,您无法访问该方法self.\uuuu init\uuu
是GraphRegion.\uuuu init\uuu
绑定到self
。因此,如果您想重用框架。\uuuuu init\uuuu
版本,您必须直接从框架
请求它
本质上,当使用GraphRegion(application)创建新实例时,Python会执行以下操作:
GraphRegion
类创建一个新的空实例,让我们给它一个临时名称new
new.\uu init\uuu(应用程序)
\uuuu init\uuuu
属性。在实例本身上找不到该类,因此Python接下来将查看该类\uuuu init\uuuu
可在类中找到。在类上查找属性时,如果该属性支持,则会执行额外的步骤:绑定<代码>\uuuu init\uuuu绑定到实例,生成绑定方法应用程序
\uuuu init\uuu
函数,传入new
(实例)和application
GraphRegion中,\uuuuu init\uuuu
您既有self
(新的实例)又有master
(绑定到与应用程序
绑定到的相同的东西),但是您还需要调用框架
Frame
上查找\uuuuu init\uuuu
直接在类上进行,因此描述符协议没有要绑定的实例。返回一个未绑定的方法Frame.\uuuu init\uuuu
无法传递绑定实例。您需要显式地传递它Tkinter.Frame
,在Python2中,整个Tkinter
模块仍然使用旧式类
对于Python3,这看起来像:
class GraphRegion(Frame):
def __init__(self, master):
super().__init__(master)
但是,如前所述,在Python 2中,当使用
Tkinter
时,您唯一的选择是直接引用直接从Frame
类检索到的未绑定方法。,因为Frame.\uuu init\uuu
是一个未绑定方法
只有在实例上查找方法才能生成绑定方法,有一个实例要绑定到self
。因为Frame.\uuuu init\uuuu
是未绑定的,所以需要显式地传入第一个参数,即实例
否则,您无法访问该方法self.\uuuu init\uuu
是GraphRegion.\uuuu init\uuu
绑定到self
。因此,如果您想重用框架。\uuuuu init\uuuu
版本,您必须直接从框架
请求它
本质上,当使用GraphRegion(application)创建新实例时,Python会执行以下操作:
GraphRegion
类创建一个新的空实例,让我们给它一个临时名称new
new.\uu init\uuu(应用程序)
\uuuu init\uuuu
属性。在实例本身上找不到该类,因此Python接下来将查看该类\uuuu init\uuuu
可在类中找到。在类上查找属性时,如果该属性支持,则会执行额外的步骤:绑定<代码>\uuuu init\uuuu绑定到实例,生成绑定方法应用程序
\uuuu init\uuu
函数,传入new
(实例)和application
GraphRegion中,\uuuuu init\uuuu
您既有self
(新的实例)又有master
(绑定到与应用程序
绑定到的相同的东西),但是您还需要调用框架
Frame
上查找\uuuuu init\uuuu
直接在类上进行,因此描述符协议没有要绑定的实例。返回一个未绑定的方法Frame.\uuuu init\uuuu
无法传递绑定实例。您需要显式地传递它Tkinter.Frame
,在Python2中,整个Tkinter
模块仍然使用旧式类
对于Python3,这看起来像:
class GraphRegion(Frame):
def __init__(self, master):
super().__init__(master)
但是,如前所述,在Python 2中,当使用
Tkinter
时,您唯一的选择是直接引用直接从Frame
类检索到的未绑定方法。,因为Frame.\uuu init\uuu
是一个未绑定方法
只有在实例上查找方法才能生成绑定方法,有一个实例要绑定到self
。因为Frame.\uuuu init\uuuu
是未绑定的,所以需要显式地传入第一个参数,即实例
否则,您无法访问该方法self.\uuuu init\uuu
是GraphRegion.\uuuu init\uuu
绑定到self
。因此,如果您想重用框架。\uuuu init\uuuu
版本,您必须去请求
__init__(myobject, master)
class Movie(object):
def __init__(self, title):
self.title = title