|
|
发表于 2023-10-15 14:19:04
|
显示全部楼层
这个问题是由于在你的myproperty类的__init__方法中,你错误地将fget参数赋值给了self.fset,而fset参数赋值给了self.fset。这就导致在调用__get__方法时,实际上调用的是setx方法,而setx方法需要两个参数:一个是实例本身,另一个是要设置的值。但在__get__方法中,你只传入了实例本身,没有传入要设置的值,所以就出现了这个错误。
你应该在myproperty类的__init__方法中,将fget参数赋值给self.fget,fset参数赋值给self.fset,fdel参数赋值给self.fdel。这样在调用__get__方法时,就会调用getx方法,而getx方法只需要一个参数,即实例本身,就不会出现这个错误了。
以下是修正后的代码:
- 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 = 250
- def getx(self):
- return self._x
- def setx(self, value):
- self._x = value
- def delx(self):
- del self._x
- x = myproperty(getx, setx, delx)
- cc = C()
- print(cc.x)
复制代码
这段代码应该可以正常运行,不会出现你提到的错误。 |
|