是否有预定义的 python 描述符 class?

Is there a pre-defined python descriptor class?

我想创建一个 class,它有很多属性,大部分都只是获取和设置。这是一个示例 MyClass()

>>> class MyClass():
...     def getx(self): return self.__x
...     def setx(self, value): self.__x = value
...     def delx(self): del self.__x
...     x = property(getx, setx, delx, "I'm the 'x' property.")
...     y = property(getx, setx, delx, "I'm the 'y' property.")
...
>>> bar = MyClass()
>>> bar.x = 'jeff'
>>> bar.y = 3
>>> print(bar.x)
3
>>> print(bar.y)
3
>>>

这里的 x 和 y 属性是相同的,所以如果我希望 x 和 y 是唯一的,我将需要为每个新的 getx/setx/delx。

这个例子效果更好。

>>> class MyClassBase():
...     def __init__(self, initval=None):
...         self.val = initval
...     def __get__(self, obj, objtype):
...         return self.val
...     def __set__(self, obj, val):
...         self.val = val
...
>>> class MyClassFinal():
...     x = MyClassBase(1)
...     y = MyClassBase('xyzzy')
...
>>> foo = MyClassFinal()
>>> foo.x = 2
>>> print(foo.x)
2
>>> print(foo.y)
xyzzy
>>>

我认为 MyClassBase() 就是他们所说的(或等同于)描述符 class。现在属性 x、y(以及我选择添加到 MyClassFinal() 的任何其他属性)是独立的。

我需要自己创建 MyClassBase() 似乎很奇怪。这(或类似的东西)不是已经在某处定义所以我不需要创建自己的吗?

我也对如何创建具有大量属性和最少代码的 class 的不同示例持开放态度。

啊啊啊!我让事情变得 方式 太复杂了。显然我需要做的就是这个:

>>> class MyClassSimple:
...     x = 1
...     y = 'blue'
...     def __str__(self):
...         return f'{self.x}, {self.y}'
...
>>> zot = MyClassSimple()
>>> print(zot)
1, blue
>>> zot.x = 'red'
>>> zot.y = 3
>>> print(zot)
red, 3