python - 在 Python 中获取类的变量和方法的列表

标签 python

如果我有以下类,获取变量和方法的确切列表的最佳方法是什么,排除父类(super class)中的变量和方法?

class Foo(Bar):
  var1 = 3.14159265
  var2 = Baz()
  @property
  def var3(self):
      return 42
  def meth1(self, var):
      return var

我希望元组 ('var1','var2','var3','meth1') 开销最小。这是在 Django 环境中运行的,它似乎将它的一些类实例变量放在只读的 __dict__ 变量中;这是我无法复制的壮举。

这是我在玩它时看到的,除了从 dir() 中删除 __* 或手动列出它们之外还有什么建议吗?

>>> a=Foo()
>>> a
<__main__.Foo instance at 0x7f48c1e835f0>
>>> dict(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: iteration over non-sequence
>>> dir(a)
['__doc__', '__module__', 'meth1', 'var1', 'var2', 'var3']
>>> a.__dict__
{}

最佳答案

如果类及其父类(super class)是已知的,则类似于:

tuple(set(dir(Foo)) - set(dir(Bar)))

如果你想让它更通用,你可以使用类似

的东西获得基类列表
bases = Foo.mro()

...然后使用该列表从所有基类中减去属性。

关于python - 在 Python 中获取类的变量和方法的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607307/

相关文章:

java 相当于 python syslog.syslog()

python - 选择要调整面板的哪一部分

Python 打包外部依赖

python - 使用 GDAL 在 Python 和 Matplotlib 中读取 TIFF

python - 无法从 zappa 包中排除某些 python 库

python - 如何计算属性(property)总和

python - 获取范围内集合的端点

python - 为什么在 Python 的 try/except 构造中使用 else?

python - django.db.utils.ProgrammingError : relation "auth_user" does not exist

python - 更改文件创建日期