【发布时间】:2014-02-23 00:57:11
【问题描述】:
我不相信这是可能的,但我想我会问,因为我是 Python 新手。给定一个具有属性的对象,该属性的值由描述符处理;是否有可能知道涉及给定的描述符类型?
示例描述符:
class Column(object):
def __init__(self, label):
self.label = label
def __get__(self, obj, owner):
return obj.__dict__.get(self.label)
def __set__(self, obj, value):
obj.__dict__[self.label] = value
测试对象:
class Test(object):
name = Column("column_name")
def add(self):
print self.name.__class__
执行此操作:
my_test = Test()
my_test.name = "myname"
my_test.add()
这给出:<type 'str'> 这是值“myname”的数据类型,是否可以测试 isinstance(self.name, Descriptor) - 这返回 false,但我希望它返回 true - 或其他类似吗?
编辑 - 删除 Test 上旧式类的错误
【问题讨论】:
-
my_test.name通常应该分配给列对象吗? -
不,my_test.name 是 Test() 对象的属性。描述符将用于确保名称有效。我使用描述符而不是@property 来减少代码,因为它将在许多地方使用。理想情况下,我想知道 my_test.name 使用了列描述符。但是,我不确定这是否可能..
-
@Matt 您是否试图确定描述符覆盖了哪些方法,或者对象的类是否是描述符?
-
@Mike 我正在尝试确定属性是否使用特定描述符来设置值。
-
好吧,我不知道你有什么问题,但对我来说
foo = Column("bar") ; isinstance(foo,Column)返回True(用py2和py3测试)并且foo.__class__是<class '__main__.Column'>
标签: python software-design descriptor