|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zltzlt 于 2019-10-11 18:51 编辑
1.代码是很基础的,自定义一个描述符中执行过程不理解,望高手解答!!!
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)
def __set__(self,instance,value):
self.fset(instance,value) #对这个地方不理解
def __delete__(self,instance):
self.fdel(instance)
class C:
def __init__(self):
self._x = None
def getX(self):
return self._x
def setX(self,value):
self._x = value
def delX(self):
del self._x
x=MyProperty(getX,setX,delX)
3.执行:
c=C()
c.x='X-man'
3.问题描述:
在执行c.x='X-man'后,此时self.fset = setX,则self.fset(instance,value)实际等同于setX(c,'X-man'),这样也能运行吗?不是应该是c.setX('X-man')吗?
4.问题补充,自己根据理解写的例子
class A:
def qiu2(self,y):
print('调用了qiu2')
return y*y
def qiu1(self,x):
print(x(self,5)) ##此处为疑惑点
执行
a=A()
a.qiu1(qiu2)
Traceback (most recent call last):
File "", line 1, in
a.qiu1(qiu2)
NameError: name 'qiu2' is not defined
#####按照描述符的类似的办法,x = qiu2 , 那x(self,5)应该也能调用成功的,可是会报错。然后将疑惑点改成print(self.x(5))运行仍然会出错,错误仍然是'qiu2'没有定义。为什么之前的代码能实现,而此处行不通呢?困扰几天了,希望大神能解答!!!!!!真是为了这个问题烦啊
1. self.fset(instance, value) 表示调用自身 fset。在这里 fset 是 C.setX,C.setX 有两个参数 self 和 value,在这里给 C.setX 传递两个参数 instance(self 参数,是对象的实例))和 value。
2. 是相等的。c.setX('X-man') 会隐式地给 setX 传递 self 参数为 c。
3. 全局变量 qiu2 根本没定义,你是想这样吗:
- class A:
- def qiu2(self,y):
- print('调用了qiu2')
- return y*y
- def qiu1(self,x):
- print(x(self,5))
- a = A()
- a.qiu1(A.qiu2)
复制代码
|
|