首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,在@属性和函数之间确定

问Python,在@属性和函数之间确定
EN

Stack Overflow用户
提问于 2014-04-29 12:59:57
回答 2查看 38关注 0票数 1

是否有一种方法可以判断对象是函数还是属性?我知道函数是一个属性,但是我想使用__iter__()返回一个生成器,它只返回作为键/值对的属性。

以下是我认为我能做到的:

代码语言:javascript
复制
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)

__iter__()只应该为属性a提供一个键/值,而不应该为b返回任何内容。用Python可以做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-29 13:47:37

你有几个选择。请记住,dir包含所有内容,但看起来您想要的东西是不可调用的,并且不以任何下划线开头,即

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-04-29 13:49:31

属性只是一个描述符,因此您需要通过类而不是实例访问实际属性。所以试着做这样的事情:

代码语言:javascript
复制
for att in attributes:
    try:
        if isinstance(getattr(type(self), att), property):
            yield 'whatever you want to yield'
    except:
        pass
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23365387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档