gpt4 book ai didi

python - 如何向 _not_ 继承的 python *class* 添加属性?

转载 作者:太空狗 更新时间:2023-10-29 21:05:36 25 4
gpt4 key购买 nike

我需要能够在子类不可见的(不是类的实例)上设置一个标志。问题是,这可能吗?如果可能,我该怎么做?

为了说明,我想要这样的东西:

class Master(SomeOtherClass):
__flag__ = True

class Child(Master):
pass

... 其中 hasattr(Master, "__flag__") 应该为 Master 返回 TrueFalse child 。这可能吗?如果是这样,如何?我不想在每个 child 中都将 __flag__ 显式设置为 false。

我最初的想法是定义 __metaclass__,但我没有那么多奢侈,因为 Master 继承自一些我无法控制的其他类和元类哪些是私有(private)的。

最终我想写一个装饰器,这样我就可以做类似的事情:

@hide_this
class Master(SomeOtherClass): pass

@hide_this
class Child(Master): pass

class GrandChild(Child): pass
...
for cls in (Master, Child, GrandChild)
if cls.__hidden__:
# Master, Child
else:
# GrandChild

最佳答案

你们非常亲密:

class Master(SomeOtherClass):
__flag = True

class Child(Master):
pass

两个前导下划线没有尾随下划线调用名称重整,因此该属性将被命名为_Master__flag。因此,如果您检查:

hasattr(cls, '_{}__flag'.format(cls.__name__))

对于 Master,它只有True,而不是Child

关于python - 如何向 _not_ 继承的 python *class* 添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com