示例情况:
所以,我们假设我正在创建一些检查工具,我想有一个方法列出可调用字段,这是一些方法,用于列出数据字段(普通属性)和属性(所以我也可以添加信息声明描述符方法,以查看属性是否为常量等。)
问题:
callable
内置函数,只是尝试调用某个对象,或检查它是否具有__call__
属性;这些检查方式从最可靠和最安全的列出)已知方法:
广告。 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__(...)