Giả sử có một loại A với hàng tá phương pháp. Đối với các mục đích của tôi, tôi chỉ cần 2 hoặc 3 phương pháp "thú vị" của lớp A trong lớp mới của tôi B. Hơn nữa, tôi muốn mở rộng lớp B với một số phương pháp của riêng tôi. Kế thừa thường được thực hiện với lớp B [a]: Phương thức def1 []: ... Phương thức def2 []: ... Nhưng sau đó tôi có một loạt các phương pháp thừa của A In B. Có cách nào tôi có thể chọn một số Các phương thức từ tương tự như trong thông báo nhập khẩu, nơi tôi có thể giới hạn các phương thức được truy cập, do đó để nói một kế thừa một phần. Tôi muốn có một cái gì đó là lớp B [từ một phương thức lấy, methody]: def newmethod1 []: ... def newmethod2 []: ... def newmethod3 []: ...
Kế thừa đại diện cho một mối quan hệ "là", tức là lớp B là loại A [một con chó là động vật có vú]. Có thể là thiết kế của bạn không chính xác, nếu lớp kế thừa của bạn không cần hầu hết chức năng của cha mẹ. Thay vào đó, bạn có thể xem xét thành phần, các phương pháp B thực sự của đối tượng? [ví dụ: chó có thể ăn và đi, nhưng không nên 'fillbowl' thuộc về chủ sở hữu?] Một quá. Đây là một cách khác để chia sẻ mã mà không có cây kế thừa cloated và truy cập vào các phương pháp mà bạn có thể không nên
Ví dụ: trong Thư viện Paramiko SSH Có một lớp máy chủ và bạn có thể thực hiện nó như kiểm tra lớp [paramiko.serverinterface]: và bạn không cần __init__ để sử dụng lớp nhưng nó sẽ tự động chạy các lệnh chính trong paramiko.serverinterface .__ init__ Tôi hy vọng điều này đã giúp được :]
Đây là giải pháp cho vấn đề của bạn. Lớp xe []: def__init __ [tự, xe, màu sắc, giá cả]: self.car = car self.colour = color self.price = price class newcar [xe]: def__init __ [tự, xe, màu, giá, acc]: Super [] .__ init __ [màu, giá] self.car = car self.acc = acc ở đây lớp newcar chỉ lấy hai thuộc tính 2 từ lớp xe nhưng lớp xe có 3 thuộc tính.
Nếu hai lớp có một số phương pháp chung, có vẻ như tự nhiên đối với tôi rằng chúng nên là các lớp con của một tầng lớp thượng lưu. Sau đó, bạn đặt mọi phương pháp ở vị trí đúng của nó. Nhưng tôi không biết câu trả lời cho câu hỏi thực tế của bạn: P
Không có phương pháp nào chỉ kế thừa chỉ một hoặc hai phương thức hoặc chức năng từ một lớp nhất định và lý do là chúng ta có thể thừa hưởng toàn bộ lớp và gọi các phương thức hoặc chức năng cần thiết từ lớp đến lớp mà chúng ta cần Chúng tôi chỉ thừa hưởng một hoặc hai phương pháp.
@ Scorpia tăng nhưng những gì, nếu đó là một lớp Python được xây dựng, ví dụ: lớp danh sách?
Ếch Bạn có thể có cả hướng đối tượng và lập trình chức năng cùng một lúc. Python có thể không phải là tốt nhất nhưng bạn thực sự có thể viết phần lớn ứng dụng với các đối tượng
Lớp A: def __init __ [self, item1, item2]: self.Item1 = item1 self.Item2 = item2 class B [a]: def kế thừa [self]: result = list [[self.item1, self.item2]] return Kết quả c = b ["1", "2"] d = c.Inerit [] print [d]
Đối với vấn đề này, bạn không cần thừa kế. Những gì bạn cần là rụng một lớp vào B và chỉ thực hiện các phương pháp cần thiết: Lớp B: def __init __ [self] self._a = a [] def func1 [arg]: self._a.func1 [arg] def func2 [arg] : self._a.func2 [arg] Trong phương pháp này, khi bạn tạo lớp OBJ của lớp B, bạn sẽ chỉ có func1 [] và func2 [] có sẵn để xem và sử dụng. Và đó là những gì bạn muốn;] Hãy tận hưởng!
Cắt nó và dán nó vào lớp học mới của bạn
Sẽ có bất kỳ vấn đề tốc độ nếu bạn thừa hưởng toàn bộ lớp A?
Dan Walker bây giờ JavaScript đánh bại Python trong chủ đề này ... Chúng tôi có một phương pháp siêu
Nếu bạn tạo ra một lớp được kế thừa từ một lớp xây dựng, bạn cũng có thể kế thừa mọi thứ sau đó ghi đè lên những gì bạn muốn. Có thể phải mất một vài dòng, nhưng tôi sẽ được tổ chức.
Tôi không biết làm thế nào để làm điều đó. Tôi chỉ sao chép phương thức từ lớp A và dán vào lớp B [tôi không giỏi trong Python nên tôi không biết nếu điều đó có thể]
Nếu có nhu cầu kế thừa chỉ một vài phương pháp, thì đó là một chỉ số cho thấy thiết kế không tối ưu. Rõ ràng giao diện có ý nghĩa hơn. Tôi sẽ thiết kế lại dự án và ngừng đi sai cách [và đã làm nó nhiều lần]
Dan Walker đúng vậy. Ưu điểm từ Python so với các ngôn ngữ C mặc dù là lập trình chức năng, một đặc quyền từ Python [liên quan đến C's. Có một vài ngôn ngữ khác cung cấp cho bạn lập trình chức năng].
Không có metod như vậy trong Python. thử ctrl+c & ctrl+v
Theo như tôi biết, bạn có thể chọn và chọn chức năng cha mẹ khi kế thừa một lớp Python. Tôi cũng không nghĩ bạn có thể làm điều đó trong các ngôn ngữ định hướng đối tượng khác.
Tôi nghĩ rằng câu hỏi cần một mã ví dụ, không nhiều văn bản.