Python,自动向子类添加属性

2024-09-27 00:19:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想自动添加一个属性到一些继承自类A的对象中。 这些对象只能从另一个包含我要复制的属性的对象实例化:

class A(object):
    pass

class B(A):
    pass

class C(object):
    pass

class MyClass(MySuperClass):
    def __init__(self):
        MySuperClass.__init__(self)

        b = B()
        hasattr(b, "my_attribut")  # True

        c = C()
        hasattr(c, "my_attribut")  # False, doesn't inherit from A


b = B() # Raise error, this object can't be instantiated here.

也许用元类?你知道吗


Tags: 对象实例selftrue属性objectinitmy
1条回答
网友
1楼 · 发布于 2024-09-27 00:19:10

类属性

如果您想添加一个属性,那么您确实可以使用一个只影响子类行为的元类。你知道吗

class MetaA(type):
    def __new__(cls, name, bases, name_space):
        # Metaclass does nothing for A
        if not bases:
            return type.__new__(cls, name, bases, name_space)

        # Metaclass adds a class attribute to anything that inherits A
        else:
            return super().__new__(cls, name, bases, dict(name_space, my_attribute='foo'))

class A(metaclass=MetaA):
    pass

class B(A):
    pass

hasattr(A, "my_attribute") # False
hasattr(B, "my_attribute") # True

实例属性

如果您希望您的对象有一个实例属性(如果它们的类是从A继承的),那么元类就不会这样做。在A.__init__中可以有一个条件语句。你知道吗

class A:
    def __init__(self):
        if type(self) != A:
            self.my_attribute = 'foo'

class B(A):
    pass

hasattr(A(), "my_attribute") # False
hasattr(B(), "my_attribute") # True

相关问题 更多 >

    热门问题