In [5]: class a(object):
...: def __init__(self):
...: print "In class a"
...: self.a = 1
...:
In [6]: class b(object):
...: def __init__(self):
...: print "In class b"
...: self.b = 2
...:
...:
In [7]: class c(b, a):
...: pass
...:
In [8]: c.mro()
Out[8]:
[<class '__main__.c'>,
<class '__main__.b'>,
<class '__main__.a'>,
<type 'object'>]
In [9]: obj = c()
In class b
In [10]: obj.__dict__
Out[10]: {'b': 2}
Giá trị mặc định __init__
phương pháp của lớp c
được kêu gọi obj
sáng tạo, mà trong nội bộ gọi __init__
chỉ lớp b
.Hành vi của Mutlple thừa kế trong python
Theo hiểu biết của tôi, nếu tôi kế thừa từ 2 lớp, đối tượng lớp dẫn xuất của tôi phải có các biến từ cả hai lớp (trừ khi chúng là riêng tư cho các lớp đó).
Câu hỏi của tôi: Tôi có sai khi mong đợi đối tượng dẫn xuất của tôi chứa các biến từ cả hai lớp không? Nếu vậy, tại sao? Không nên __init__
của lớp a
cũng được gọi? Điều gì sẽ xảy ra trong ngôn ngữ như C++?
câu trả lời của jcollado là chính xác. Xem [answer] (http://stackoverflow.com/q/607186) để biết thêm chi tiết về cách 'super' hoạt động. – perelman