Tôi đang tạo một lớp GUI sử dụng Frame() làm lớp cơ sở của nó.Các lớp Python: Thừa kế và Instantiation
Trong phương pháp init GUIclass của tôi, tôi muốn tạo một khung phụ tùng
Ngay bây giờ tôi có:
class GUIclass(Frame):
def __init__(self, parent):
frame = Frame(self, parent)
Nhưng tôi đã thấy điều này ở nơi khác cho dòng thứ ba:
Frame.__init__(self, parent)
Tôi mới lập trình, python và thừa kế chắc chắn và tôi muốn biết nếu tôi hiểu sự khác biệt giữa hai chính xác. Tôi đã làm rất nhiều nghiên cứu và đọc, tôi hứa, nhưng tôi không thể tìm thấy bất cứ điều gì đã làm cho nó hoàn toàn rõ ràng:
Trong trường hợp đầu tiên tôi không gọi phương thức init như tôi đã tạo một đối tượng Frame (khung) và khi một đối tượng được tạo ra, phương thức init của nó được gọi là python.
Trong trường hợp thứ hai, người ta gọi phương thức init trên lớp (mà tôi tin là hoàn toàn hợp pháp?) Vì đối tượng Khung không được tạo, do đó sẽ không tự động làm điều đó.
Đúng không?
Tôi cũng đã nhìn thấy:
frame = Frame.__init__(self, parent)
mà thực sự đã ném tôi ra. Đây có phải chỉ là một người làm điều gì đó dư thừa hoặc có lý do cho việc này không?
Cảm ơn sự giúp đỡ của bạn, tôi muốn thực hiện nó chậm ngay bây giờ và đảm bảo rằng tôi hiểu đầy đủ mọi dòng mã mà tôi viết thay vì viết và chạy toàn bộ chương trình mà tôi hiểu được.
Bạn nên sử dụng thứ hai: 'Khung .__ init __ (bản thân, cha mẹ)' –
Đầu tiên chỉ đơn giản là không chính xác như nó tạo ra một không cần thiết trong bộ khởi tạo của một đối tượng dựa trên khung. –
Thứ hai và thứ ba là siêu cuộc gọi đến initializer cha trong khung, chẳng hạn như initializer của lớp con sẽ mở rộng những điều cơ bản, không ghi đè lên những điều cơ bản. Nhưng không cần phải chỉ định kết quả của cuộc gọi siêu làm cho sai thứ ba. –