Я хотел бы использовать собственный дескриптор для проверки и (де) сериализации, например так:
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
).После прочтения Итерации по атрибутам объекта в 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
Как мне перечислить атрибуты объекта, отфильтрованные по типу дескриптора?
Обновление:
На основании принятого ответа (спасибо!) Я получил следующее:
def list_my_properties (self):
return [ field for field, value in self.__class__.__dict__.items()
if isinstance(value, MyProperty) ]