Điều gì đúng về phương thức __ Init__ trong Python?
Các ví dụ trên là các lớp và đối tượng ở dạng đơn giản nhất và không thực sự hữu ích trong các ứng dụng thực tế Show
Để hiểu ý nghĩa của các lớp, chúng ta phải hiểu hàm __init__() tích hợp sẵn Tất cả các lớp đều có một hàm gọi là __init__(), hàm này luôn được thực thi khi lớp bắt đầu Sử dụng hàm __init__() để gán giá trị cho thuộc tính đối tượng hoặc các thao tác khác cần thực hiện khi đối tượng được tạo Thí dụTạo một lớp tên là Person, sử dụng hàm __init__() để gán giá trị cho tên và tuổi lớp Người. p1 = Người("John", 36) in(p1. tên) Ghi chú. Hàm class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown5 được gọi tự động mỗi khi lớp được sử dụng để tạo một đối tượng mới Khi đọc mã Python của người khác, nhiều người mới bắt đầu cảm thấy bối rối với phương pháp class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown6. Mục đích của nó là gì? __init__ trong Python là gì? Xem video này trên YouTube Mục đích của class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown6 trong Python là gì? Phương thức Python dành riêng class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown5 được gọi là hàm tạo của một lớp. Bạn có thể gọi phương thức khởi tạo để tạo một đối tượng (= thể hiện) từ một lớp và khởi tạo các thuộc tính của nó Mặc dù điều này trả lời câu hỏi, nhưng nếu bạn có bất kỳ tham vọng nào trong việc trở thành một lập trình viên Python chuyên nghiệp, thì việc biết rằng phương thức class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 là hàm tạo của một lớp là chưa đủ. Bạn cũng cần biết cách sử dụng hàm tạo trong các dự án của riêng mình—và cách tùy chỉnh các đối số của nó. Sự hiểu biết thấu đáo về hàm tạo đóng vai trò là nền tảng vững chắc cho các khái niệm nâng cao hơn trong lập trình Python hướng đối tượng. Đọc tiếp để tìm hiểu nửa còn lại của phương trình Ví dụ tương tác. Trước khi tôi giải thích cho bạn, hãy mở lỗ hổng kiến thức của bạn. Xem xét ví dụ sau Tập thể dục. Thêm một màu đối số vào phương thức class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 và làm cho mã chạy không có lỗi Hãy đi sâu vào ví dụ đơn giản này một cách chi tiết Làm thế nào để sử dụng phương pháp __init__ trong thực tế?Chúng tôi sẽ sử dụng một số thuật ngữ lập trình hướng đối tượng trong Python để giải thích ví dụ của chúng tôi. Đảm bảo nghiên cứu bảng cheat sau (bạn cũng có thể tải xuống bản PDF tại đây). Nhấp vào hình ảnh để lấy bảng gian lận (mở trong tab mới). Nếu bạn đã quen thuộc với các thuật ngữ hướng đối tượng cơ bản như lớp và thể hiện, chỉ cần đọc tiếp Bạn đã biết rằng phương thức class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 là phương thức khởi tạo của một lớp. Bạn gọi phương thức khởi tạo để tạo các thể hiện (hoặc đối tượng) mới. Nhưng chính xác thì điều này diễn ra như thế nào trong thực tế? Tự luậnHàm tạo class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 yêu cầu ít nhất một đối số. Theo tiêu chuẩn PEP8, nên biểu thị đối số này là class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown3. Trong mọi trường hợp, đối số class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown3 trỏ đến chính phiên bản mới được tạo và nó cho phép bạn thao tác các thuộc tính phiên bản của phiên bản mới. Trong ví dụ về con chó, bạn sẽ sử dụng class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown5 để đặt thuộc tính class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown6 của con chó mới tạo thành chuỗi class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown7 Hãy xem ví dụ mã cơ bản sau đây class Dog: def __init__(self): self.color = "blue" bello = Dog() print(bello.color) # blue
Tuy nhiên, ví dụ tối thiểu này là không thực tế. Một số con chó có màu nâu, những con khác có màu đen và chỉ một số có màu xanh lam Nhiều đối số hàm tạoVậy làm thế nào chúng ta có thể tạo ra những con chó khác nhau với màu sắc khác nhau? . Đây là một ví dụ khác khi chúng tôi tạo hai chú chó có màu sắc khác nhau. Bạn có thể nhận ra màu sắc của chúng? class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown Ngược lại với ví dụ đầu tiên, bây giờ chúng ta xác định hàm tạo class Dog: def __init__(self, color): self.color = color class CuteDog(Dog): def __init__(self, color): Dog.__init__(self, color) self.hairs = True bello = CuteDog('brown') print(bello.hairs) # True print(bello.color) # brown8 với hai đối số thay vì một Đầu tiên là đối số class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown3 như trước. Đối số thứ hai là đối số tùy chỉnh class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown6 được thông qua bởi người gọi hàm tạo. Trong trường hợp của chúng tôi, chúng tôi tạo hai phiên bản Dog, class Dog: def __init__(self, color): self.color = color class CuteDog(Dog): def __init__(self, color): Dog.__init__(self, color) self.hairs = True bello = CuteDog('brown') print(bello.hairs) # True print(bello.color) # brown0 và class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown82, bằng cách chỉ định đối số class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown6 cho cả hai Lưu ý rằng đối số class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown3 được xử lý hoàn toàn bởi môi trường lập trình Python. Python chỉ cần chuyển một tham chiếu đến thể hiện class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 tương ứng tới hàm tạo class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 Sự khác biệt giữa Trình xây dựng và Trình khởi tạo là gì?Chà, tôi đã không sử dụng một thuật ngữ rất chính xác trong các đoạn trước. Tôi đã sử dụng thuật ngữ “hàm tạo” cho cả lệnh gọi class Dog: def __init__(self, color): self.color = color class CuteDog(Dog): def __init__(self, color): Dog.__init__(self, color) self.hairs = True bello = CuteDog('brown') print(bello.hairs) # True print(bello.color) # brown1 và lệnh gọi class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown5. Nhưng chỉ cuộc gọi cũ mới có thể được biểu thị là phương thức khởi tạo vì chỉ cuộc gọi này mới thực sự tạo ra một thể hiện mới. Vào thời điểm đó, chúng tôi gọi phương thức class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9, thể hiện đã được tạo (Python chuyển nó cho chúng tôi thông qua đối số class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown3). Đó là lý do tại sao một thuật ngữ chính xác hơn cho phương thức class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 là phương thức khởi tạo. Đó là cách tôi sẽ biểu thị nó ở phần sau để bù đắp cho nó. 😉 Ý nghĩa của dấu gạch dưới trong tên phương thức __init__ là gì?Tôi đã viết cả một bài về ý nghĩa của dấu gạch dưới trong Python. Hãy xem nếu chủ đề này khiến bạn quan tâm hơn nữa. Tuy nhiên, điểm mấu chốt là như sau Dấu gạch dưới kép “__” (được gọi là “dunder“) được sử dụng để tạo thuộc tính cá thể hoặc phương thức riêng tư (không thể truy cập từ bên ngoài lớp) — khi được sử dụng làm dấu gạch dưới hàng đầu. Khi được sử dụng như bao vây dunder (e. g. “__init__”) nó chỉ ra rằng đó là một phương thức đặc biệt trong Python (được gọi là “phương thức ma thuật”) Làm cách nào để sử dụng __init__ trong Lớp kế thừa?Lớp kế thừa là lớp kế thừa tất cả các thuộc tính và phương thức từ lớp cha. Đây là một ví dụ class Dog: def __init__(self, color): self.color = color class CuteDog(Dog): def __init__(self, color): Dog.__init__(self, color) self.hairs = True bello = CuteDog('brown') print(bello.hairs) # True print(bello.color) # brown Tính kế thừa rất quan trọng trong Python. Trong ví dụ, lớp cha là lớp Dog mà bạn đã biết ở trên. Phương thức khởi tạo __init__ xác định màu của con chó này Bây giờ, chúng ta cũng tạo một lớp mới class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown52 kế thừa tất cả các thuộc tính từ lớp cha class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9. Bạn có thể định nghĩa tính kế thừa bằng cách chỉ định tên của lớp cha trong dấu ngoặc sau lớp con. class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown54 Điều thú vị là phương thức __init__ của lớp con CuteDog gọi phương thức __init__ của lớp cha. Điều này có ý nghĩa vì lớp con có các thuộc tính giống như lớp cha—và chúng cũng cần được khởi tạo Tuy nhiên, cách Pythonic hơn là sử dụng hàm class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown55 giúp bạn truy cập lớp cha dễ dàng hơn class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown8 Với sự trợ giúp của hàm class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown55, bạn có thể dễ dàng sử dụng lại phương thức khởi tạo của lớp cha Hãy xem xét một vài câu hỏi liên quan __ init __ có cần thiết trong Python không?Không. Bạn chỉ cần bỏ qua phương thức khởi tạo. Do đó, lớp của bạn sẽ không có bất kỳ thuộc tính thể hiện nào ngay sau khi tạo. Tuy nhiên, bạn có thể tự động thêm các thuộc tính phiên bản vào bất kỳ thời điểm nào trong tương lai. Đây là một ví dụ class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown5 đẹp làm sao. Bạn thậm chí có thể tạo các lớp trống và “điền vào” các phương thức và thuộc tính sau này trong Python __ init __ Trả về là gì?Bản thân phương thức class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 không trả về gì cả. Về mặt kỹ thuật, Python đầu tiên sử dụng phương thức khởi tạo class Dog: def __init__(self, color): self.color = color class CuteDog(Dog): def __init__(self, color): Dog.__init__(self, color) self.hairs = True bello = CuteDog('brown') print(bello.hairs) # True print(bello.color) # brown1 trước khi sử dụng class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 để khởi tạo tất cả các thuộc tính. Do đó, chỉ hàm tạo mới trả về thể hiện mới được tạo __init__ có thể trả về giá trị không?Không. Giá trị trả về duy nhất không gây ra lỗi thời gian chạy là class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown30. Tất cả các giá trị trả về khác đều gây ra lỗi. Xem ví dụ mã sau class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown3 Vì vậy, đừng bao giờ sử dụng bất kỳ giá trị trả về nào trong phương thức __init__ và bạn đã sẵn sàng Đi đâu từ đây?Cảm ơn đã đọc hết bài viết. Bạn đã biết rằng tên class Dog: def __init__(self, color): self.color = color bello = Dog("blue") print(bello.color) # blue alice = Dog("brown") print(alice.color) # brown9 được dành riêng cho phương thức khởi tạo Python được gọi trong hàm tạo Bài viết yêu cầu nắm vững kiến thức cơ bản về Python. Đầu tư thời gian để tìm hiểu và nghiên cứu những điều đó là rất quan trọng để bạn thành công với tư cách là một lập trình viên chuyên nghiệp Để giúp mọi người phát triển kỹ năng của họ theo cách tự động, được cá nhân hóa, tôi đã tạo một khóa học Python qua email miễn phí “Coffee Break Python” giúp nâng cao trình độ kỹ năng của bạn một cách dường như vô tận. Ngày này qua ngày khác… Tham gia cùng hàng chục nghìn lập trình viên Python (miễn phí 100%) Chris Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây Ý nghĩa của __ init __ trong Python là gì?"__init__" là một phương thức được đặt lại trong các lớp python . Nó được biết đến như một hàm tạo trong các khái niệm hướng đối tượng. Phương thức này được gọi khi một đối tượng được tạo từ lớp và nó cho phép lớp khởi tạo các thuộc tính của lớp.
__ init __( self trong Python là gì?Từ khóa self in trong Python được sử dụng cho tất cả các phiên bản trong một lớp . Bằng cách sử dụng từ khóa self, người ta có thể dễ dàng truy cập tất cả các thể hiện được định nghĩa trong một lớp, bao gồm các phương thức và thuộc tính của nó. trong đó. __init__ là một trong những phương thức dành riêng trong Python. Trong lập trình hướng đối tượng, nó được gọi là hàm tạo.
Cú pháp chính xác cho __ init __ là gì?Trình tạo __init__ mặc định
. lớptên_lớp(). def __init__(bản thân). # Các câu lệnh của hàm tạo # các phương thức lớp khác … …
Phương thức __ init __ trả về cái gì?__init__ không trả về bất cứ thứ gì và phải luôn trả về Không . |