Python,自动向子类添加属性

Python,自动向子类添加属性,python,inheritance,Python,Inheritance,我想自动将属性添加到从类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,

我想自动将属性添加到从类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.
可能使用元类?

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

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.\uuu init\uuu
中使用条件语句

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

是否让构造函数接受要从中复制的对象
b=b(self)
我不想使用构造函数=)你为什么不想使用构造函数?听起来可能是一个-你能解释一下你试图用这种复杂方法解决的实际问题吗?@Dbi:你说的“另一个解决方案”是什么意思?你没有解决办法。