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ếtmrocủ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ủaParentquaSuperFunthì làm thế nào ạý e là
SuperFuncũng là con của lớpParentthì 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
Childbao giờ cũng xuất hiện trướcParenttrongmrocủaSuperFun, nên khi gọisuper(SuperFun, self).print_out()thì luôn gọi method củaChildtrước.e cảm ơn
Mình thấy chỉ cần đổi Class SuperFun(Parent, Child):
là được mà