我佛了,百度了下python的self十几个都是复制粘贴怪关键他们每个结尾都是复制粘贴了一句
如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?
留下疑问然后就结束,然后我搜这个疑问又是复制粘贴以及底下留这个没答案的疑问
举个例子,假设有一个类p,它的定义是
class p:
def __init__(self):
pass
然后,我们实例化了两个类p的实例,一个a、一个b
a=p()
b=p()
类实际是一个模板,我们定义class p,实际就是定义了一个代码模板。这个时候self是不指代具体目标的。
当我们实例化类的时候,实际上就是复制了一个类的模板,比如a=p(),实际就是复制了一个类p的模板,然后将a指向这个复制的模板。而此时,这个复制的类p的模板里的self将指向a。同理,b=p(),也是复制了一份p的模板,而这一份模板里的self指向b。
在上面的例子里,有两个实例化的类——a、b。它们各自的self分别指向自己本身——a、b。所以对于a=p(),类p的init(self)等同于,init(a)。对于b=p(),类p的init(self)等同于init(b)。
可见,有多少个类的实例,就有多少个self,这些self互不干涉,分别指向实例化时的变量名。
还是类本身,访问实例用this
self是指向类对象,而不是类的实例对象
self不是表示类本身,而是表示当前的类的实例对象
Python编写类的时候,每个函数参数第一个参数都是self,首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?self在定义时需要定义,但是在调用时会自动传入。self总是指调用时的类的实例。
要学会思考如何去验证,这样才有利于学习。想要知道self指向哪一个,python里面对象都有一个id,那是不是可以尝试用id来判断呢?
class MyClass():
def __init__(self):
self.n = 0
def func(self):
print(id(self))
a = MyClass()
a.func()
print(id(a))
b = MyClass()
b.func()
print(id(b))