(Tôi không thể tìm thấy một tài liệu tham khảo bất cứ nơi nào về vấn đề này sau khi một số Googling.)Khi nào cần gọi hàm super() .__ init __() của Python?
Kịch bản có thể được chứng minh rõ ràng với mẫu mã ngắn này:
class X:
def __init__(self, stuff):
self.__stuff = stuff
class Y(X):
def __init__(self, stuff):
# Is it safe to execute statements before calling super.__init__()?
new_stuff = self.call_another_method(stuff)
super(Y, self).__init__(new_stuff)
Sử dụng CPython 3.x, ở trên mẫu mã hoạt động - giả sử call_another_method()
tồn tại. Kiểu mã hóa này nói chung là an toàn, nhưng cau mày hay được coi là unPythonic? Tôi không thể tìm thấy lời khuyên về vấn đề này.
Tại sao tôi quan tâm?
Nền của tôi xuất phát từ nhiều ngôn ngữ lập trình hướng đối tượng truyền thống như C++, C# và Java, nơi "siêu" phải được gọi đúng như câu lệnh đầu tiên trong một hàm tạo lớp con - bỏ qua trường hợp không đối số.
Nếu nó quan trọng, tôi còn trẻ Pythoneer: 3+, xin vui lòng.
IIRC, trong Python 3.x, bạn không cần phải gọi 'super (ClassName, self)' nữa, 'super()' trên chính nó hoạt động tốt. –
Về điều duy nhất 'super' trong Java và Python có điểm chung là tên. Java 'super' là một từ khóa tham chiếu đến lớp cơ sở (duy nhất); Python 'super' là một hàm dựng sẵn, sử dụng các đối số của nó, trả về một đối tượng phục vụ như một proxy cho một số lớp trong thứ tự phân giải phương thức của đối tượng. – chepner
@ChinmayKanchi: Cảm ơn bạn đã biết mẹo. Tôi sẽ cập nhật mã của mình trong tương lai! – kevinarpe