簡體   English   中英

是否有預定義的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM