from typing import List
def own_properties(cls: type) -> List[str]:
return [
key
for key, value in cls.__dict__.items()
if isinstance(value, property)
]
def properties(cls: type) -> List[str]:
props = []
for kls in cls.mro():
props += own_properties(kls)
return props
举例来说:
class GrandparentClass:
@property
def grandparent_prop(self):
return "grandparent_prop"
class ParentClass(GrandparentClass):
@property
def parent_prop(self):
return "parent"
class ChildClass(ParentClass):
@property
def child_prop(self):
return "child"
properties(ChildClass) # ['child_prop', 'parent_prop', 'grandparent_prop']
5条答案
按热度按时间0pizxfdo1#
你可以在你的类中添加一个函数,看起来像这样:
这将查找类中的所有属性,然后创建一个字典,其中包含具有当前示例值的每个属性的条目。
o8x7eapl2#
属性是类的一部分,而不是示例的一部分。因此,您需要查看
self.__class__.__dict__
或等效的vars(type(self))
所以这些属性是
6kkfgxo03#
对于对象f,这给出了作为属性的成员列表:
2nc8po8w4#
正如user2357112-supports-monica在一个重复问题的注解中指出的那样,接受的答案只得到那些直接定义在类上的属性,而没有继承的属性。为了解决这个问题,我们还需要遍历父类:
举例来说:
如果需要获取示例的属性,只需将
instance.__class__
传递给get_properties
即可rdlzhqv95#
dir(obj)
给出了obj
的所有属性的列表,包括方法和属性。