我试图用mixin,MyCollection
,Val5
,Val10
创建具体的类Val15
。Val15
正在尝试从MyCollection
继承values
。当Val15
被实例化时,我试图调用Val10
和Val5
的value
,并将它们添加到Val15
,values
。你知道吗
但是,Val15
将只继承Val10
的值,所有类都将调用Val10
的值。你到底怎样才能推翻这个问题?你知道吗
class MyCollection(object):
def __init__(self):
super().__init__()
self.values = []
class MyMessage(object):
def __init__(self):
super().__init__()
def message(self):
print('Hello World')
class Val10(object):
def __init__(self):
super().__init__()
print('Call 10')
self.values.append(self.value())
def value(self):
print('Value 10')
return 10
class Val5(object):
def __init__(self):
super().__init__()
print('Call 5')
self.values.append(self.value())
def value(self):
print('Value 5')
return 5
class Val15(Val10, Val5, MyMessage, MyCollection):
def __init__(self):
super().__init__()
def my_sum(self):
return sum(self.values)
val15 = Val15()
val15.my_sum()
val15.message()
# Result:
# Call 5
# Value 10
# Call 10
# Value 10
# Hello World
有趣的是:
要获得父级值的总和,必须分别调用它们:
替代解决方案
另一种方法是定义
value
总是返回所有继承值的总和,不管它们是什么,而不知道要调用哪个父类value
:此解决方案不对继承的配置方式进行任何假设。你知道吗
备注:
super()
语法getattr(super(), 'value', lambda: 0)
返回父类的绑定value
方法(如果存在),或者默认为返回0的函数。你知道吗相关问题 更多 >
编程相关推荐