论参数self

此篇文章仅适用于py3.在py2中,a.fuc(x)中的参数x必须是

类a的实例对象,而py3则可以是任意对象。参考绑定方法和非绑定方法

当一个对象添加了一个方法,并且此方法的第一个参数为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的对象
原文地址:https://www.cnblogs.com/saolv/p/8732319.html