这是我的代码:
class Property:
def __init__(self, fget, fset):
self.fget = fget
self.fset = fset
def __get__(self, obj, objtype=None):
return self.fget(obj)
def __set__(self, obj, value):
self.fset(obj, value)
class X:
def __init__(self, val):
self.__x = val
@Property
def x(self):
return self.__x
@x.setter
def x(self, val):
self.__x = int(val)
myx = X(13)
print(myx.x)
我收到此错误:
Traceback (most recent call last):
File "/home/izilinux/git/python/property/ex2.py", line 21, in <module>
class X:
File "/home/izilinux/git/python/property/ex2.py", line 26, in X
def x(self):
TypeError: Property.__init__() missing 1 required positional argument: 'fset'
吸气剂工作正常!当我尝试将 setter 合并到代码中时,问题就开始了。有什么想法吗?
当您使用 @Property 时,Python 需要 Property 类中的 fget 和 fset 参数,但您没有提供它们。要解决此问题,您需要通过显式传递 getter 和 setter 函数来使用 Property 类:
class Property:
def __init__(self, fget=None, fset=None):
self.fget = fget
self.fset = fset
def __get__(self, obj, objtype=None):
return self.fget(obj)
def __set__(self, obj, value):
self.fset(obj, value)
class X:
def __init__(self, val):
self.__x = val
@Property
def x(self):
return self.__x
@x.setter
def x(self, val):
self.__x = int(val)
myx = X(13)
print(myx.x)