30/09/2018, 22:20
Hỏi về đa kế thừa (Multiple inheritance) trong python
mình học đến bài 44 ở quyển learnpythonthehardway
và mình test đoạn code:
class Parent(object):
def print_out(self):
print "PARENT!"
class Child(object):
def print_out(self):
print "CHILD!"
class SuperFun(Child, Parent):
def print_out(self):
super(SuperFun, self).print_out()
s = SuperFun()
s.print_out()
kết quả:
CHILD!
class SuperFun kế thừa 2 class Child và Parent
mình muốn hỏi là sau khi dùng phương thức super(...)
thí khi dùng s.print_out()
nó sẽ gọi đến print_out()
của class đứng trước trong khai báo class SuperFun(Child, Parent)
. Ở đây là Child
vậy mình muốn gọi đến cái print_out()
của Parent
thì làm thế nào
Bài liên quan
Parent.print_out(self)
Thế vấn đề diamond problem trong đa kế thừa, Python giải quyết sao ta.
Python sử dụng thuật toán C3 để xác định method resolution order (MRO) để xây dựng một bản đố kế thừa.
Gọi
cls.mro()
method để biếtmro
của một class:Chi tiết thuật toán C3 có thể xem tại đây. Cơ bản thì thuật toán C3 đảm bảo 2 điều:
Đối với tất cả các lớp trong bản đồ kế thừa thì 2 điều trên luôn đúng.
vậy mình muốn gọi đến cái
print_out()
củaParent
quaSuperFun
thì làm thế nào ạý e là
SuperFun
cũng là con của lớpParent
thì có cách nào để gọi đến phương thức của lớp cha đó thông qua lớp con không ấyNhư trên đó, gọi như vậy trong
SuperFun.print_out
.Bạn đọc bài trên của mình thì thấy, thứ tự khai báo lớp cha được bảo toàn, nên
Child
bao giờ cũng xuất hiện trướcParent
trongmro
củaSuperFun
, nên khi gọisuper(SuperFun, self).print_out()
thì luôn gọi method củaChild
trước.e cảm ơn
Mình thấy chỉ cần đổi Class SuperFun(Parent, Child):
là được mà