はじめに
移植やってます。
多重継承 (Python)
class A(object):
def myprint(self):
print('A')
class B(A):
def myprint(self):
print('B')
super().myprint()
class C(B):
def myprint(self):
print('C')
super().myprint()
class D(A):
def myprint(self):
print('D')
super().myprint()
class E(D, C):
def myprint(self):
print('E')
super().myprint()
o = E()
o.myprint()
# E
# D
# C
# B
# A
class E
が画像のオレンジ色クラスです。
左側からDFSで継承されています。
class A
が上手いこと後ろに回っていますね。
どうする? (Ruby)
class A
def myprint
puts 'A'
end
end
class B < A
def myprint
puts 'B'
super
end
end
class C < B
def myprint
puts 'C'
super
end
end
class D < C
def myprint
puts 'D'
super
end
end
class E < D
def myprint
puts 'E'
super
end
end
p E.ancestors
# [E, D, C, B, A, Object, Kernel, BasicObject]
一つは、継承チェーンを考えて直列に並べる。
module A
def myprint
puts 'A'
end
end
class B
include A
def myprint
puts 'B'
super
end
end
class C < B
def myprint
puts 'C'
super
end
end
module D
include A
def myprint
puts 'D'
super
end
end
class E < C
include D
def myprint
puts 'E'
super
end
end
p E.ancestors
[E, D, C, B, A, Object, Kernel, BasicObject]
ここでは見えませんが、A
とD
がモジュール化できそうなのでMixin
する方法
メモ
- Python の 多重継承 を学習した
- 道のりは遠そう