此篇文章仅适用于py3.在py2中,a.fuc(x)中的参数x必须是
类a的实例对象,而py3则可以是任意对象。参考绑定方法和非绑定方法
当一个对象添加了一个方法,并且此方法的第一个参数为self,或者其他任意名称的时候(只要不为空即可),则此参数指代的是某个对象。当此对象调用此方法时,传递的这第一个参数可以是任意对象,可以是他的对象,甚至可以他本身。但当是此对象的对象在调用该方法时,该参数已经默认了指代的是当前这个对象的对象(这是python设计者的设计,没为什么),在调用的时候不能显氏的传递给此参数任何值,否则会报错(因为此参数已经有值,此值为调用者本身)
举个例子:
class a:
pass def fuc(sel):
print (sel.arg) class b:
arg = 1
def __init__(self,arg):
self.arg=arg
bb=b(2) a.fuc=fuc#a对象添加fuc方法,sel参数可为任意对象
a.fuc(b)
a.fuc(bb) a.arg=3
a.fuc(a)#甚至可以是他本身,也可以是他的对象aa #但是,当此对象的对象调用该方法时,sel已经默认为调用者本身,不必也不能传递任何参数 aa=a()
aa.fuc()
aa.arg=5
aa.fuc()
aa.fuc(aa)#报错,不能传递任何参数
同样:
class a:
pass
def fuc(sel)
print ("ddd") aa=a()
aa.fuc=fuc#对象aa添加方法fuc,aa在调用fuc时,必须传递参数,此参数可以是任意对象 aa.fuc(aa)
aa.fuc()#报错,没给sel传参,除非是aa的对象不用传参,本例中aa不是类对象所以无法创建aa的对象