使用属性时,识别属性类型

时间:2014-02-08 11:09:56

标签: python properties attributes inspect

示例情况:

所以,我们假设我正在创建一些检查工具,我想有一个方法列出可调用字段,这是一些方法,用于列出数据字段(普通属性)和属性(所以我也可以添加信息声明描述符方法,以查看属性是否为常量等。)

问题:

  1. 如何迭代某些对象字段?
  2. 如何识别某个字段是否为属性? (检查它是否可调用很简单,使用callable内置函数,只是尝试调用某个对象,或检查它是否具有__call__属性;这些检查方式从最可靠和最安全的列出)
  3. 已知方法:

    广告。 1

    我能想到的最简单方法是使用dir()或检查__slots__。不过,我知道dir()仅用于REPL模式,但我不知道为什么,所以这里有一些奖励问题:“为什么我不应该在实际使用dir()生活用法?还是应该?“

    此外,我想我记得有关__dict__的一些事情,但我必须咨询Data model以确定如何使用它,以及它是否能满足我的需要。无论如何,在尝试使用__slots__时,我还必须查阅该文章。

    广告。 2

    没有怪异的想法。我尝试使用普通getattr(obj, name)object.__getattribute__(obj, name)obj.__getattribute__(name)obj.__getattr__(name)(仅限某些情况)来获取描述符对象(实现__get__,{{1}然后检查这些方法,而是调用__set__

    Post Scriptum

    这不是现实生活中的例子,更像是我弄清楚python细微差别的方式。如果有什么理由我甚至不想尝试这样做,我会很高兴听到它,但我也想知道怎么做,如果我真的(就像“我知道这很糟糕,但是如果我不这样做,我的老板会解雇我“ - 真的”需要。

    我最感兴趣的是p3.3 +,但这些问题也代表p2.7.x.

    ==编辑==

    广告。 2

    user2357112的帮助下,我得到了这个:

    obj.name.__get__(...)

0 个答案:

没有答案