python - 没有父类(super class)属性的类属性

标签 python method-resolution-order

我有一个继承层次结构,其中一些类具有名为“pickled”的类属性。我想获得 A.pickled 如果它存在,或者 None 如果不存在 - 即使 A 派生自许多类,包括例如 B 和 B.pickled 存在(或不存在) .

现在我的解决方案抓取 A__mro__。如果可能的话,我想要一个更干净的解决方案。

最佳答案

要绕过通过__mro__进行的正常搜索,请直接查看类的属性字典。您可以使用 vars() function为此:

return vars(cls).get('pickled', None)

您也可以直接访问 __dict__ 属性:

return cls.__dict__.get('pickled', None)

但使用内置函数优于直接访问双下划线属性字典。

object.__getattribute__ 是用于查看类属性的错误方法;请参阅What is the difference between type.__getattribute__ and object.__getattribute__?

type.__getattribute__ 用于类上的属性访问,但仍然会搜索 MRO。

关于python - 没有父类(super class)属性的类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150636/

相关文章:

python - 将文件句柄缓存到 python 中的 netCDF 文件

python - Kivy 小部件隐藏在 Windows 标题栏下

python - 你如何解码 Tensorflow 中的 one-hot 标签?

python - 如果定义一个没有 __init__ 方法的类会怎样?

python - cron 作业不输出到 nohup.out

python - git send-email可以发送html格式的diff补丁吗?

使用泛型和类型推断的 C# 方法解析

c++ - 为什么我不能使用 using 来消除基本成员变量之间的歧义?

python - 为什么 __mro__ 没有出现在 dir(MyClass) 中?

python - Python 中的 MRO 未按预期工作