Ruby中的多重继承是通过包含模块来模拟的,但是不可能直接从模块(不是类)继承属性。我提出的解决方案是定义模块初始化的属性(下面的代码)。与下面的代码相比,是否有更好的方法来实现多重继承(继承方法和属性)?
module MyCustomMixin
attr_accessor :a
def initialize
self.a = 1
end
def b
"something"
end
end
class MyCreateView < CreateView
include MyCustomMixin
end
class MyReadView < ReadView
include MyCustomMixin
end
class MyUpdateView < UpdateView
include MyCustomMixin
end
class MyDeleteView < DeleteView
include MyCustomMixin
end
答案 0 :(得分:1)
问题是,这在技术上是可行的,但它需要一些看起来不太漂亮的finagling(尤其是使用#initialize
) - 这是理所当然的。如果唯一的目的是防止代码重复,我不建议以这种方式编写代码。
所以,请考虑:
MyFooView
拥有FooView
版本的原因是什么?它只是包含mixins? View
都有一个共同的父母,你可以添加这个混合? View
以外的功能?为什么不直接将其添加到父View
? View
类,为什么它本身不是一个类,所以每个View
都拥有它的一个实例?