描述符self,问题
之前小甲鱼说,self参数是python解释器自动传入例如这个伪代码:
class A:
def __init__(self):
pass
def object_mothod(self,value):
pass
a = A()
a.object_mothod(1)
这里self不需要手动传参self,会自动把a实例传给self,1就对应value
为什么以下代码需要手动传self
class Myproperty:
def __init__(self,fget=None,fset=None,fdel=None):
self.fget = fget
self.fset = fset
self.fdel = fdel
def __get__(self,instance,owner):
return self.fget(instance) #为什么这里需要手动self
def __set__(self,instance,value):
print('调用中')
self.fset(instance,value) #为什么这里需要手动self
def __delattr__(self,instance):
self.fdel(instance) #为什么这里需要手动self
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self,value):
print('设置中',self)
self._x = value
def delx(self):
del self._x
def debug(self):
print('debug')
x = Myproperty(getx,setx,delx)
c = C()
c.x = 'hello'
self表示自身的意思,在类里面调用自己的方法或者属性要用self。a = A()表示实例化了一个对象a,a具备了A类中的所有属性和方法,此时此刻a就是self,编写类的时候因为没有实例化,所以用self表示,当实例化了以后a就是self
页:
[1]