Tôi có đoạn mã sau:Nhiều thừa kế và sử dụng một phương pháp của một trong các lớp cơ sở
class A(object):
def __init__(self):
self.name = "A"
super(A, self).__init__()
def Update(self):
print "Update A"
self.PickTarget()
def PickTarget(self):
print "PickTarget A"
class B(object):
def __init__(self):
self.name = "B"
super(B, self).__init__()
def Update(self):
print "Update B"
self.PickTarget()
def PickTarget(self):
print "PickTarget B"
class C(A, B):
def __init__(self):
super(C, self).__init__()
def Update(self, useA):
if useA:
A.Update(self)
else:
B.Update(self)
c = C()
c.Update(useA = True)
# prints:
# Update A
# PickTarget A
c.Update(useA = False)
# prints:
# Update B
# PickTarget A
Tại sao gọi C.Update
với useA=False
vẫn gọi vào A.PickTarget
? Làm thế nào tôi có thể làm cho công việc này như thế nào tôi muốn nó làm việc (tức là B.Update luôn luôn gọi vào B.PickTarget)? Tôi chắc chắn điều này đã được hỏi trước nhưng tìm kiếm của tôi không có gì cả - có lẽ vì tôi không biết phải tìm kiếm gì.
Mặc dù tôi vẫn nghĩ rằng điều này có thể đòi hỏi một thiết kế lại, tôi sẽ chỉ ra rằng mangling tên cung cấp một giải pháp khá linh hoạt cho vấn đề này. Xem [chỉnh sửa của tôi] (http://stackoverflow.com/questions/6849519/multiple-inheritance-and-using-a-method-of-one-of-the-base-classes/6849613#6849613). – senderle