Hướng dẫn python call parent method in override - ghi đè phương thức cha gọi python
Khi tạo một hệ thống phân cấp đối tượng đơn giản trong Python, tôi muốn có thể gọi các phương thức của lớp cha từ một lớp dẫn xuất. Trong Perl và Java, có một từ khóa cho điều này ( 9). Ở Perl, tôi có thể làm điều này: Show
Trong Python, có vẻ như tôi phải đặt tên cho lớp cha mẹ một cách rõ ràng từ đứa trẻ. Trong ví dụ trên, tôi phải làm một cái gì đó như 0.Điều này dường như không đúng vì hành vi này làm cho nó khó thực hiện các hệ thống phân cấp sâu. Nếu trẻ em cần biết lớp nào xác định một phương pháp di truyền, thì tất cả các loại đau thông tin được tạo ra. Đây có phải là một giới hạn thực sự trong Python, một khoảng cách trong sự hiểu biết của tôi hay cả hai?
Siêu bão 4.7485 Huy hiệu vàng20 Huy hiệu bạc32 Huy hiệu Đồng5 gold badges20 silver badges32 bronze badges Hỏi ngày 30 tháng 4 năm 2009 lúc 1:52Apr 30, 2009 at 1:52
3 Sử dụng chức năng 1:
Đối với Python <3, bạn phải chọn cách sử dụng các lớp kiểu mới và sử dụng:
Jason m 6.26320 Huy hiệu vàng68 Huy hiệu bạc118 Huy hiệu đồng20 gold badges68 silver badges118 bronze badges Đã trả lời ngày 30 tháng 4 năm 2009 lúc 1:58Apr 30, 2009 at 1:58
Adam Rosenfieldadam RosenfieldAdam Rosenfield 381K96 Huy hiệu vàng509 Huy hiệu bạc585 Huy hiệu Đồng96 gold badges509 silver badges585 bronze badges 15 Python cũng có siêu 2
Thí dụ:
Đã trả lời ngày 30 tháng 4 năm 2009 lúc 1:58Apr 30, 2009 at 1:58
Adam Rosenfieldadam RosenfieldJay 381K96 Huy hiệu vàng509 Huy hiệu bạc585 Huy hiệu Đồng14 gold badges65 silver badges83 bronze badges 3 Python cũng có siêu Trả về một đối tượng proxy ủy quyền gọi cho một loại phụ huynh hoặc anh chị em của loại. Điều này rất hữu ích cho việc truy cập các phương thức kế thừa đã được ghi đè trong một lớp. Thứ tự tìm kiếm giống như được sử dụng bởi getAttr () ngoại trừ loại chính loại bị bỏ qua.
Thí dụ:Apr 30, 2009 at 2:02
JayjayAlex Martelli 41K14 Huy hiệu vàng65 Huy hiệu bạc83 Huy hiệu Đồng163 gold badges1204 silver badges1383 bronze badges 5
sẽ chỉ ổn, cho dù lớp cha mẹ ngay lập tức đã xác định 3 hoặc kế thừa nó. 9 chỉ cần thiết để hỗ trợ thích hợp cho nhiều kế thừa (và sau đó nó chỉ hoạt động nếu mỗi lớp sử dụng nó đúng cách). Nói chung, 5 sẽ tìm kiếm 6 trong tổ tiên của ____ 27 nếu 7 không xác định/ghi đè nó và điều này đúng với "phương pháp gọi của lớp con" như bất kỳ sự cố nào khác!
Đã trả lời ngày 30 tháng 4 năm 2009 lúc 2:02Jul 26, 2016 at 10:12
Alex Martellialex MartelliArun Ghosh 828K163 Huy hiệu vàng1204 Huy hiệu bạc1383 Huy hiệu Đồng1 gold badge24 silver badges38 bronze badges 1 Python 3 có một cú pháp khác nhau và đơn giản hơn để gọi phương thức cha mẹ. Nếu lớp 9 kế thừa từ 0, thì từ 1 có thể được gọi từ 9 qua 3:
Arun Ghosharun Ghosh
Nhiều câu trả lời đã giải thích cách gọi một phương thức từ cha mẹ đã bị ghi đè vào đứa trẻ. Tuy nhiên
"Làm thế nào để bạn gọi phương pháp của lớp cha từ lớp con?" Cũng có thể có nghĩa là: "Làm thế nào để bạn gọi các phương thức kế thừa?"Jul 11, 2017 at 14:32
Bạn có thể gọi các phương thức được kế thừa từ một lớp cha mẹ giống như chúng là phương pháp của lớp con, miễn là chúng không bị ghi đè.Ben ví dụ. Trong Python 3:6 silver badges16 bronze badges 5 Vâng, điều này có thể khá rõ ràng, nhưng tôi cảm thấy rằng nếu không chỉ ra điều này, mọi người có thể để lại chủ đề này với ấn tượng bạn phải nhảy qua các vòng vô lý chỉ để truy cập các phương pháp di truyền trong Python. Đặc biệt là câu hỏi này đánh giá cao trong các tìm kiếm "Cách truy cập phương thức của lớp cha trong Python" và OP được viết từ góc độ của một người mới đến Python.super():
Tôi đã tìm thấy: https://docs.python.org/3/tutorial/classes.html#inheritance để hữu ích trong việc hiểu cách bạn truy cập các phương thức di truyền.Apr 17, 2013 at 10:44
Đã trả lời ngày 11 tháng 7 năm 2017 lúc 14:32yesnik Benben1 gold badge27 silver badges22 bronze badges 1 8536 Huy hiệu bạc16 Huy hiệu Đồng
Đã trả lời ngày 30 tháng 4 năm 2009 lúc 1:58Apr 30, 2009 at 1:58
Adam Rosenfieldadam Rosenfieldlawrence 381K96 Huy hiệu vàng509 Huy hiệu bạc585 Huy hiệu Đồng5 gold badges37 silver badges50 bronze badges 0 Python cũng có siêu
Trả về một đối tượng proxy ủy quyền gọi cho một loại phụ huynh hoặc anh chị em của loại. Điều này rất hữu ích cho việc truy cập các phương thức kế thừa đã được ghi đè trong một lớp. Thứ tự tìm kiếm giống như được sử dụng bởi getAttr () ngoại trừ loại chính loại bị bỏ qua.Dec 31, 2011 at 17:39
Thí dụ:Joran Beasley Jayjay12 gold badges149 silver badges174 bronze badges 1 41K14 Huy hiệu vàng65 Huy hiệu bạc83 Huy hiệu Đồng
0sẽ chỉ ổn, cho dù lớp cha mẹ ngay lập tức đã xác định 3 hoặc kế thừa nó. 9 chỉ cần thiết để hỗ trợ thích hợp cho nhiều kế thừa (và sau đó nó chỉ hoạt động nếu mỗi lớp sử dụng nó đúng cách). Nói chung, 5 sẽ tìm kiếm 6 trong tổ tiên của ____ 27 nếu 7 không xác định/ghi đè nó và điều này đúng với "phương pháp gọi của lớp con" như bất kỳ sự cố nào khác!Đã trả lời ngày 30 tháng 4 năm 2009 lúc 2:02Dec 10, 2014 at 13:21
Alex Martellialex Martellikkk 828K163 Huy hiệu vàng1204 Huy hiệu bạc1383 Huy hiệu Đồng1 gold badge24 silver badges44 bronze badges Python 3 có một cú pháp khác nhau và đơn giản hơn để gọi phương thức cha mẹ. 1Nếu lớp 2
Đã trả lời ngày 26 tháng 7 năm 2016 lúc 10:12 Arun Ghosharun Ghosh7 gold badges62 silver badges69 bronze badges 7,4321 Huy hiệu vàng24 Huy hiệu bạc38 Huy hiệu đồngOct 30, 2018 at 14:53
Nhiều câu trả lời đã giải thích cách gọi một phương thức từ cha mẹ đã bị ghi đè vào đứa trẻ.Khan Tuy nhiên10 silver badges11 bronze badges Trong Python 2, tôi không gặp nhiều may mắn với Super (). Tôi đã sử dụng câu trả lời từ Jimifiki về chủ đề này Làm thế nào để tham khảo phương thức cha mẹ trong Python ?. Sau đó, tôi đã thêm xoắn nhỏ của riêng mình vào nó, mà tôi nghĩ là một sự cải thiện về khả năng sử dụng (đặc biệt nếu bạn có tên lớp dài). Xác định lớp cơ sở trong một mô -đun: 3Sau đó nhập lớp vào một mô -đun khác 9: 4
Đã trả lời ngày 21 tháng 1 năm 2017 lúc 19:12Jan 21, 2017 at 19:12
BUVINJBUVINJBuvinJ 9.5835 huy hiệu vàng74 Huy hiệu bạc87 Huy hiệu đồng5 gold badges74 silver badges87 bronze badges 2 5Đã trả lời ngày 28 tháng 3 năm 2019 lúc 6:39Mar 28, 2019 at 6:39
Nếu bạn muốn gọi phương thức của bất kỳ lớp nào, bạn chỉ cần gọi 0 trên bất kỳ trường hợp nào của lớp. Nếu kế thừa của bạn tương đối sạch sẽ, điều này cũng sẽ hoạt động trên các trường hợp của một lớp con: 6Đã trả lời ngày 14 tháng 1 lúc 17:05Jan 14 at 17:05
Philosofoolphilosofoolphilosofool 7093 Huy hiệu bạc11 Huy hiệu đồng3 silver badges11 bronze badges 7
shim 8,57910 Huy hiệu vàng71 Huy hiệu bạc103 Huy hiệu đồng10 gold badges71 silver badges103 bronze badges Đã trả lời ngày 31 tháng 8 năm 2018 lúc 13:39Aug 31, 2018 at 13:39
1 Đây là một phương pháp trừu tượng hơn: 8Đã trả lời ngày 20 tháng 6 năm 2011 lúc 5:32Jun 20, 2011 at 5:32
3 Làm thế nào để bạn gọi một phương thức được ghi đè trong Python?Trong phương thức Python ghi đè xảy ra bằng cách xác định trong phương thức Lớp con A có cùng tên của một phương thức trong lớp cha.Khi bạn xác định một phương thức trong đối tượng, bạn thực hiện sau này có thể thỏa mãn cuộc gọi phương thức đó, vì vậy việc triển khai tổ tiên của nó không xuất hiện.defining in the child class a method with the same name of a method in the parent class. When you define a method in the object you make this latter able to satisfy that method call, so the implementations of its ancestors do not come in play.
Làm thế nào để bạn ghi đè cha mẹ trong Python?Nếu bạn muốn ghi đè phương thức lớp cha, hãy tạo một hàm trong đứa trẻ có cùng tên và số lượng tham số.Đây được gọi là chức năng ghi đè trong Python.create a function in the Child with the same name and number of parameters. This is called function overriding in Python.
Lớp con có thể ghi đè lên các thuộc tính của lớp cha trong Python không?Nếu bạn thêm một phương thức trong lớp con có cùng tên với hàm trong lớp cha, sự kế thừa của phương thức cha sẽ bị ghi đè..
Làm thế nào để bạn gọi một hàm tạo cha mẹ trong Python?Làm thế nào để bạn gọi một hàm tạo cha mẹ trong Python?Sử dụng Super () .__ init __ () để gọi hàm tạo lớp cha mẹ ngay lập tức.Gọi Super ().Use super(). __init__() to call the immediate parent class constructor. Call super(). |