当一个对象添加了一个方法,并且此方法的第一个参数为self,或者其他任意名称的时候(只要不为空即可),则此参数指代的是某个对象。当此对象调用此方法时,传递的这第一个参数可以是任意对象,可以是他的对象,甚至可以他本身。但当是此对象的对象在调用该方法时,该参数已经默认了指代的是当前这个对象的对象(这是python设计者的设计,没为什么),在调用的时候不能显氏的传递给此参数任何值,否则会报错(因为此参数已经有值,此值为调用者本身)
举个例子:
1 class a: 2 pass 3 4 5 def fuc(sel): 6 print (sel.arg) 7 8 9 class b: 10 arg = 1 11 def __init__(self,arg): 12 self.arg=arg 13 bb=b(2) 14 15 16 a.fuc=fuc#a对象添加fuc方法,sel参数可为任意对象 17 a.fuc(b) 18 a.fuc(bb) 19 20 a.arg=3 21 a.fuc(a)#甚至可以是他本身,也可以是他的对象aa 22 23 24 #但是,当此对象的对象调用该方法时,sel已经默认为调用者本身,不必也不能传递任何参数 25 26 aa=a() 27 aa.fuc() 28 aa.arg=5 29 aa.fuc() 30 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的对象