Trong câu trả lời của Anon:
"Nếu bạn cần một thứ gì đó từ siêu nhân __init__
được thực hiện ngoài những gì đang được thực hiện trong lớp hiện tại __init__
, bạn phải tự gọi nó, vì điều đó sẽ không tự động xảy ra"
Thật không thể tin được: anh ta diễn đạt chính xác trái với nguyên tắc thừa kế.
Không phải là "một cái gì đó từ siêu __init__
(...) sẽ không tự động xảy ra" , mà là nó sẽ xảy ra tự động, nhưng nó không xảy ra vì lớp cơ sở ' __init__
bị ghi đè bởi định nghĩa của clas dẫn xuất__init__
Vì vậy, TẠI SAO xác định một dẫn xuất ' __init__
, vì nó ghi đè lên những gì được nhắm đến khi ai đó dùng đến quyền thừa kế ??
Đó là bởi vì người ta cần định nghĩa một cái gì đó KHÔNG được thực hiện trong lớp cơ sở ' __init__
và khả năng duy nhất để có được điều đó là đặt sự thực thi của nó trong __init__
hàm của lớp dẫn xuất' .
Nói cách khác, người ta cần một cái gì đó trong lớp cơ sở ' __init__
ngoài những gì sẽ được thực hiện tự động trong classe cơ sở' __init__
nếu cái này không bị quá tải.
KHÔNG ngược lại.
Sau đó, vấn đề là các hướng dẫn mong muốn có trong lớp cơ sở ' __init__
không còn được kích hoạt tại thời điểm khởi tạo. Để bù lại sự bất hoạt này, cần phải có một điều đặc biệt: gọi rõ ràng là lớp cơ sở ' __init__
, để KEEP , KHÔNG THÊM, việc khởi tạo được thực hiện bởi lớp cơ sở' __init__
. Đó chính xác là những gì được nói trong tài liệu chính thức:
Một phương thức ghi đè trong một lớp dẫn xuất trong thực tế có thể muốn mở rộng hơn là chỉ đơn giản thay thế phương thức lớp cơ sở cùng tên. Có một cách đơn giản để gọi phương thức lớp cơ sở trực tiếp: chỉ cần gọi BaseClassName.methodname (self, argument).
http://docs.python.org/tutorial/groupes.html#inherribution
Đó là tất cả câu chuyện:
Khi mục đích là KEEP việc khởi tạo được thực hiện bởi lớp cơ sở, đó là sự kế thừa thuần túy, không có gì đặc biệt là cần thiết, người ta chỉ cần tránh để xác định một __init__
hàm trong lớp dẫn xuất
khi mục đích là thay thế việc khởi tạo được thực hiện bởi lớp cơ sở, __init__
phải được định nghĩa trong lớp dẫn xuất
khi mục đích là THÊM các quá trình khởi tạo được thực hiện bởi lớp cơ sở, một lớp dẫn xuất ' __init__
phải được xác định, bao gồm một lệnh gọi rõ ràng đến lớp cơ sở__init__
Điều tôi cảm thấy đáng kinh ngạc trong bài đăng của Anon không chỉ là anh ta bày tỏ sự trái ngược với lý thuyết thừa kế, mà còn có 5 chàng trai đi ngang qua mà không được rẽ tóc, và hơn nữa đã không có ai phản ứng trong 2 năm qua một chủ đề mà chủ đề thú vị phải được đọc tương đối thường xuyên.
object
là một lỗi đánh máy. Nhưng bây giờ bạn thậm chí không cósuper
tiêu đề của câu hỏi của bạn đề cập đến.