Tài liệu Python 2 nói rằng super() chức năng "trả về một đối tượng proxy ủy nhiệm các cuộc gọi phương thức cho một lớp cha hoặc anh chị em của loại."Một lớp anh chị em trong Python là gì?
Những câu hỏi:
- một lớp anh chị em bằng Python là gì?
- Làm thế nào để bạn ủy thác một cuộc gọi phương thức cho một lớp anh chị em?
Giả định của tôi là một anh chị em cho một lớp nhất định là một lớp kế thừa từ cùng một cấp độ gốc. Tôi đã soạn thảo mã sau đây để xem cách gọi phương thức có thể được giao cho anh chị em, nhưng nó không hoạt động. Tôi phải làm gì hoặc hiểu sai?
class ClassA(object):
def MethodA(self):
print "MethodA of ClassA"
class ClassB(ClassA):
def MethodB(self):
print "MethodB of ClassB"
class ClassC(ClassA):
def MethodA(self):
super(ClassC, self).MethodA()
def MethodB(self):
super(ClassC, self).MethodB()
if __name__ == '__main__':
ClassC().MethodA() # Works as expected
# Fail while trying to delegate method to a sibling.
ClassC().MethodB() # AttirbuteError: 'super' object has no attribute 'MethodB'
Tôi không có thời gian để viết câu trả lời đầy đủ, nhưng tôi nghĩ rằng các tài liệu đang đề cập đến nhiều thừa kế. Nếu lớp C kế thừa từ cả A và B thì bạn có thể xem xét A và B là 'anh chị em' theo một nghĩa nào đó. 'super()' các cuộc gọi trong cơ thể của A trên một thể hiện của C sẽ đại biểu cho B. Xem [câu hỏi này] (http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with -multiple-inheritance) cho thấp xuống. –
Câu trả lời được chấp nhận cho câu hỏi này ở đây giải thích chi tiết về cách 'super()' thực sự có thể gọi cha mẹ nhưng cũng là các lớp anh chị em: http://stackoverflow.com/questions/5033903/python-super-method-and-calling-alternatives –
@SimeonVisser, tôi đã thấy câu hỏi đó, thậm chí còn đóng vai chính nó. Nó không đưa ra câu trả lời rõ ràng cho lớp anh chị em là gì. Câu hỏi này liên quan đến câu hỏi đó, nhưng rõ ràng không phải là một bản sao. – golem