Function Python,决定@property和函数之间的关系
有没有办法判断一个对象是函数还是属性?我知道函数是一个属性,但我想使用Function Python,决定@property和函数之间的关系,function,class,python-2.7,properties,Function,Class,Python 2.7,Properties,有没有办法判断一个对象是函数还是属性?我知道函数是一个属性,但我想使用\uuuu iter\uuuu()返回一个生成器,该生成器只将属性作为键/值对返回 以下是我认为我可以做的: class A(object): _a = None _b = None def __init__(self, a, b): self._a = a self._b = b @property def a(self):
\uuuu iter\uuuu()
返回一个生成器,该生成器只将属性作为键/值对返回
以下是我认为我可以做的:
class A(object):
_a = None
_b = None
def __init__(self, a, b):
self._a = a
self._b = b
@property
def a(self):
return self._a
def b(self):
return self._b
def __iter__(self):
attributes = [attr for attr in dir(self)]
for att in attributes:
if hasattr(att, 'property'): # this does not work
yield (att, getattr(self, att)
\uu iter\uu()
应该只为属性a
提供一个键/值,而不为b
返回任何内容。可以在Python中执行此操作吗?您有几个选项。请记住,dir
包含所有内容,但看起来您需要的是不可调用且不以任何下划线开头的内容,即
def __iter__(self):
attrs = [a for a in dir(self) if not a.startswith("_")]
for attr_name in attrs:
attr = getattr(self, attr_name)
if not hasattr(attr, "__call__"): # or if not callable(attr):
yield attr_name, attr
属性只是一个描述符,因此需要通过类而不是实例来访问实际属性。因此,请尝试以下方法:
for att in attributes:
try:
if isinstance(getattr(type(self), att), property):
yield 'whatever you want to yield'
except:
pass
没有我的公司。与我一起,但请尝试
\uuu dict\uu
绕过描述符机制并获取底层属性对象。