- , . , , , Python. , , ; : mixins/ .
mixin :
class A(object):
def __init__(self, a=None, *args, **kwargs):
self.a = a
super(A, self).__init__(*args, **kwargs)
class B(object):
def __init__(self, b=None, *args, **kwargs):
self.b = b
super(B, self).__init__(*args, **kwargs)
class X(A, B):
def __init__(self, *args, **kwargs):
super(X, self).__init__(*args, **kwargs)
x = X(a='foo', b='bar')
print x.a, x.b
X A, B, : class X(A, B).
__init__ *args, **kwargs ; super() X A B, , ( ) . A, B A.__init__, A.
super() Python.
, :
class A(object):
def __init__(self, a):
self.a = a
class B(object):
def __init__(self, b):
self.b = b
class X(object):
def __init__(self, a, b):
self.A = A(a)
self.B = B(b)
x = X('foo', 'bar')
print x.A.a, x.B.b
, super() , . , X. , :
class X(object):
@property
def a(self):
return self.A.a
__getattr__ .
class X(object):
def __getattr__(self, item):
for component in (getattr(self, c) for c in ['A', 'B']):
if hasattr(component, item):
return getattr(component, item)
- :
class X(object):
def __init__(self, A, B):
self.A = A
self.B = B
x = X(A('foo'), B('bar'))
print x.A.a, x.B.b
X, - A B, . : A B , . factory :
def make_X(a, b):
return X(
A(a),
B(b)
)