【发布时间】:2016-06-19 21:54:25
【问题描述】:
下面是descriptor 在 Python 中使用的简单示例:
class MyDescriptor(object):
def __get__(self, obj, objtype):
return 42
class MyClass(object):
d = MyDescriptor()
print MyClass().d # 42
但是,如果我希望描述符对象成为类的 实际 属性,那么 MyClass().d 将是 MyDescriptor 实例,而不是 42。
【问题讨论】:
-
你可以让
__get__返回self。但是你为什么要这样做呢?描述符的全部目的是启用此行为。如果你不想要它,为什么不把这个类变成一个描述符呢? -
我可能想存储描述符以备将来使用,例如。在这种情况下,返回
self不是一个选项:我显然不想更改描述符。 -
您可以始终将它们存储在列表或其他东西中,而不是直接作为属性。此外,由于类中只存储了描述符的一份副本,因此存储描述符本身通常没那么有用(因为您可能只能在一个地方使用它而不会引起混淆行为)。您可以改为存储描述符 class 并在以后想要使用那种描述符时创建一个新实例。
-
“将其存储在列表中”是一个不错的答案。
标签: python metaprogramming descriptor