Giả sử tôi có 3 lớp: A, B và C. A là lớp cơ sở cho B và B là cho C. Phân cấp được giữ bình thường ở đây, nhưng đối với một phương pháp, nó phải khác nhau. Đối với lớp C nó nên hành động như nó đã được thừa hưởng từ A.Python Thừa kế từ một lớp nhưng phương thức ghi đè gọi một lớp khác?
Ví dụ như thế này:
class A(object):
def m(self):
print 'a'
class B(A):
def m(self):
super(B, self).m()
print 'b'
class C(B):
def m(self):
super(A, self).m()
print 'c'
Vì vậy, về cơ bản nó sẽ làm việc như thế này:
a = A()
a.m()
a
b = B()
b.m()
a
b
c = C()
c.m()
a
c
Nhưng nó sẽ không làm việc cho lớp C, bởi vì tôi gặp lỗi này:
AttributeError: 'super' object has no attribute 'm'
Để giải quyết vấn đề này cho lớp C, tôi có thể kế thừa từ clas s A, nhưng tôi muốn kế thừa tất cả mọi thứ từ B và cho rằng phương pháp cụ thể m
gọi siêu cho lớp cơ sở A. Tôi có nghĩa là phương pháp đó là một ngoại lệ. Hay tôi nên gọi nó bằng cách nào đó khác với lớp C để làm việc?
Tôi có thể làm như thế nào?
bạn đã thử 'A.m (self)' thay vì sử dụng 'super'? –
@MathiasEttinger không, nhưng bây giờ tôi đã thử nó và nó hoạt động hoàn hảo. Cảm ơn. Bạn có thể gửi nó như là câu trả lời, bởi vì nó giải quyết vấn đề của tôi – Andrius
cho rằng để làm việc, A.m() phải là một phương pháp lớp học – fixmycode