【发布时间】:2019-09-03 06:29:18
【问题描述】:
我想使用自定义描述符进行验证和(反)序列化,如下所示:
class MyProperty():
def __init__ (self, **kwargs):
self.value = None
def __get__ (self, obj, owner_class):
return self.value
class MyClass():
foo = MyProperty()
bar = MyProperty()
def __init__(self):
self.baz = True
def list_my_properties(self):
pass # TODO
我写 list_my_properties 失败,它返回所有声明为 MyProperty 的属性(例如 foo 和 bar),但不返回其他属性(例如 baz)。在阅读Iterate over object attributes in python 之后,这是我到目前为止所尝试的:
for a, v in self.__dict__.items():
print(a, isinstance(v, MyProperty))
# [no output]
for a in dir(self):
print(a, isinstance(getattr(self, a), MyProperty))
# foo False
# bar False
# baz False
如何列出按描述符类型过滤的对象属性?
更新:
基于accepted answer(谢谢!),我最终得到了这个:
def list_my_properties (self):
return [ field for field, value in self.__class__.__dict__.items()
if isinstance(value, MyProperty) ]
【问题讨论】:
标签: python python-3.x properties attributes iteration