Constructor trong Python là một loại phương thức [hàm] đặc biệt được sử dụng để khởi tạo các thể hiện của lớp. Constructor may be co hai loai
- Constructor tham số
- Hàm tạo không tham số
Constructor định nghĩa được thực thi khi chúng ta tạo các đối tượng của lớp này
Nội dung chính
- Tạo constructor trong Python
- Ví dụ. Đếm số lượng đối tượng của một lớp
- Ví dụ. hàm tạo không tham số trong Python
- Ví dụ. constructor tham số trong Python
- Các lớp hàm sẵn có của Python
- Các thuộc tính lớp hợp nhất
Tạo constructor trong Python
Trong python, method __ init __ contructor mô phỏng của layer. Phương thức này được gọi khi lớp được khởi tạo. Chúng ta có thể chuyển bất kỳ số lượng đối số nào tại thời điểm tạo đối tượng lớp, tùy thuộc vào định nghĩa __ init __. Nó chủ yếu được sử dụng để khởi động các thuộc tính của lớp. Mỗi lớp phải có một hàm tạo
Ví dụ sau khi khởi tạo các thuộc tính của lớp Nhân viên
class Employee: def __init__[self, name, id]: self.id = id; self.name = name; def display [self]: print["ID: %d \nName: %s" % [self.id, self.name]] emp1 = Employee["Vinh", 101] emp2 = Employee["Trung", 102] # gọi phương thức display[] để hiển thị thông tin employee 1 emp1.display[]; # gọi phương thức display[] để hiển thị thông tin employee 2 emp2.display[];
Kết quả
ID: 101 Name: Vinh ID: 102 Name: Trung
Ví dụ. Đếm số lượng đối tượng của một lớp
class Student: count = 0 def __init__[self]: Student.count = Student.count + 1 s1 = Student[] s2 = Student[] s3 = Student[] print["Số lượng sinh viên là:", Student.count]
Kết quả
Số lượng sinh viên là: 3
Ví dụ. hàm tạo không tham số trong Python
class Student: # Constructor không tham số def __init__[self]: print["Đây là constructor không tham số"] def show[self, name]: print["Hello", name] student = Student[] student.show["The Mac"]
Kết quả
Đây là constructor không tham số Hello The Mac
Ví dụ. constructor tham số trong Python
class Student: # Constructor tham số def __init__[self, name]: print["Đây là constructor tham số."] self.name = name def show[self]: print["Hello", self.name] student = Student["The Mac"] student.show[]
Kết quả
Đây là constructor tham số. Hello The Mac
Các lớp hàm sẵn có của Python
Các hàm dựng sẵn được định nghĩa trong lớp được mô tả trong bảng sau
HàmMô tả1getattr[obj,name,default]Nó được sử dụng để truy cập thuộc tính của đối tượng. 2setattr[obj, name,value]Nó được sử dụng để đặt một giá trị cụ thể cho thuộc tính cụ thể của một đối tượng. 3delattr[obj, name]Nó được sử dụng để xóa một thuộc tính cụ thể. 4hasattr[obj, name]Nó trả về true nếu đối tượng chứa một số thuộc tính cụ thểVí dụ
________số 8
Kết quả
Trung 23 True print[s.age] AttributeError: 'Student' object has no attribute 'age'
Các thuộc tính lớp hợp nhất
Cùng với các thuộc tính khác, một lớp python cũng bao gồm một số thuộc tính lớp tích hợp cung cấp thông tin về lớp
Bắt đầu từ bài học này, chúng ta sẽ chuyển sang lập trình hướng đối tượng với Python với trọng tâm là kỹ thuật xây dựng lớp
Python là một ngôn ngữ thiết lập hướng đối tượng. Tất cả các phần tử trong chương trình Python thực chất đều là các đối tượng từ các lớp đã xây dựng sẵn. int, float, str, danh sách, chức năng. Python cũng cung cấp khả năng xây dựng các lớp mới. Nhìn chung các kỹ thuật xây dựng lớp trong Python tương ứng với các đối tượng đơn giản hơn so với các ngôn ngữ như C++, C#, Java
Như đã trình bày ngay từ đầu, đây không phải là khóa học nhập môn lập trình với Python, cũng không phải là khóa học lập trình hướng đối tượng. Chúng tôi giả định rằng bạn đã nắm được những khái niệm cơ bản của lập trình hướng đối tượng [lớp, đối tượng, kế thừa, đóng gói, đa hình, v. v. ]. Do đó, các bài học sẽ không trình bày chi tiết các khái niệm cơ bản mà sẽ đi vào đặc trưng sử dụng của chúng trong Python
ĐỘI DUNG CỦA BẢN DỊCH Ẩn
1. Khai báo lớp trong Python
2. Sử dụng lớp
3. Các thành phần chính trong lớp Python
4. Trình xây dựng trong Python
5. Đặc điểm của thuộc tính và phương thức trong lớp Python
6. Kết luận
Khai báo class trong Python
Python là một ngôn ngữ lập trình hướng đối tượng hoàn toàn, nghĩa là mọi phần tử trong chương trình Python đều là đối tượng. Một số, một chuỗi, một danh sách, v. v. , mà bạn đã biết thực ra tất cả đều là đối tượng của một lớp xây dựng sẵn [int, float, str, list, v. v. ]. Một hàm [xây dựng sẵn hoặc do bạn tự xây dựng bằng từ khóa def] cũng là một đối tượng
Như vậy, khi làm việc với Python từ đầu khóa học đến giờ, trên thực tế là bạn đã trực tiếp sử dụng lớp và đối tượng. Định nghĩa lớp và đối tượng trong Python hoàn toàn tương tự như trong các ngôn ngữ lập trình khác
Python cho phép người thiết lập trình tự xây dựng lớp riêng của mình
Please start up with a ví dụ
Tạo mô-đun
Số lượng sinh viên là: 37và viết mã như sau
ID: 101 Name: Vinh ID: 102 Name: Trung0
Đây là mã tạo một lớp mô tả sách, bao gồm các thông tin về tựa sách, tác giả, nhà xuất bản, năm xuất bản, lần tái bản
Lớp trong Python được khai báo với từ khóa lớp theo cấu trúc như sau
ID: 101 Name: Vinh ID: 102 Name: Trung1
Lệnh khai báo lớp cũng là một lệnh phức hợp với 1 mệnh đề. Header bao gồm từ khóa class và tên lớp, phần suite bao gồm các lệnh khai báo các thành phần của lớp
Class name must pay thủ theo quy tắc set the general list of Python. Ngoài ra, tên lớp được đặt theo quy ước PascalCase [ghi hoa chữ cái đầu mỗi từ]. Lưu ý rằng, các lớp xây dựng sẵn của Python chỉ đặt lại tên viết thường
Ngay bên dưới tiêu đề là chuỗi tài liệu của lớp. Docstring cung cấp tài liệu hỗ trợ cho việc sử dụng lớp, tương tự như vai trò của docstring trong hàm. Chuỗi tài liệu thông thường của lớp đơn giản hơn vì chỉ mục đích lược sử sử dụng của lớp
Sau phần docstring là khai báo các thành phần khác của class. Lớp trong Python có nhiều thành phần khác nhau. Phần tiếp theo của bài học sẽ giới thiệu sơ lược về các thành phần này. Trong các bài học sau chúng ta sẽ lần lượt học cách làm việc với chúng ta
Use class
With class Book build as on, you can make object as after
ID: 101 Name: Vinh ID: 102 Name: Trung2
Thấy rằng, lệnh tạo đối tượng không khác biệt gì so với lời gọi hàm thông thường
Như vậy, lệnh tạo đối tượng đơn giản nhất là sử dụng tên lớp và cặp dấu [], tương tự như một lời gọi hàm
Phụ thuộc vào hàm tạo của lớp, lời gọi lệnh tạo đối tượng có thể phức tạp hơn với nhiều tham số, giống như lời gọi hàm thông thường. Hàm tạo sẽ được trình bày chi tiết ở phần sau của bài học này
Bạn có thể xây dựng và sử dụng lớp trong cùng một mô-đun. Tuy nhiên, lớp thông thường nên được xây dựng trong mô-đun riêng
Nếu lớp được xây dựng trong một mô-đun/gói khác, bạn cần nhập nó trước khi sử dụng bằng một trong hai cách đã học
Ví dụ, nếu lớp Sách được xây dựng trong sách mô-đun, bạn có thể sử dụng
Số lượng sinh viên là: 38 hoặc
ID: 101 Name: Vinh ID: 102 Name: Trung10
ID: 101 Name: Vinh ID: 102 Name: Trung4
Nếu sử dụng
Số lượng sinh viên là: 38 bạn có thể sử dụng trực tiếp tên lớp Book
Khi sử dụng
ID: 101 Name: Vinh ID: 102 Name: Trung10, bạn phải sử dụng thêm tên mô-đun.
ID: 101 Name: Vinh ID: 102 Name: Trung13
Các thành phần chính trong lớp Python
Mặc dù bạn có thể khai báo một lớp hoàn toàn không chứa bất kỳ thành viên nào, lớp như vậy không có giá trị. Lớp trong Python thường chứa các thành phần sau
- Constructor [hàm tạo]
- Các thuộc tính [biến]
- The method [method]
- Các thuộc tính [thuộc tính]
Hàm tạo [constructor] là hàm được gọi trong quá trình tạo đối tượng của lớp. Khác với C# hay Java, hàm tạo trong Python không phải là hàm chạy đầu tiên khi tạo đối tượng, và cũng không phải là hàm chịu trách nhiệm tạo đối tượng. Hàm tạo trong Python có tác dụng tạo các đặc tính thành viên [thuộc tính thể hiện]. Chúng ta sẽ học cách làm việc với hàm tạo ở phần sau của bài học này
Thuộc tính [biến/đặc tính] là thành phần chứa dữ liệu trong lớp/đối tượng. Python phân biệt hai loại thuộc tính. thuộc tính thể hiện và thuộc tính lớp
Thuộc tính sơ thẩm là những biến chứa trạng thái của một đối tượng cụ thể và đặc trưng cho đối tượng. Trong Python, thuộc tính thể hiện được khai báo và gán giá trị khi tạo hàm
Thuộc tính lớp là những biến chứa giá trị đặc trưng cho cả lớp chứ không phải đặc trưng cho một đối tượng cụ thể. Thuộc tính lớp có cùng giá trị trong tất cả các đối tượng của lớp. Thuộc tính lớp có thể được sử dụng, ví dụ, để theo dõi số lượng đối tượng của lớp được tạo ra
Phương thức [method] là thành phần xử lý dữ liệu trong Python. Phương thức thực chất là các loại hàm khác nhau được khai báo trong lớp. Python phân biệt instance method, class method và static method
Phương thức sơ thẩm là các hàm xử lý trạng thái của đối tượng. Phương thức thể hiện gắn liền với đối tượng và sử dụng các thuộc tính thể hiện [dữ liệu gắn liền với từng đối tượng]
Phương thức lớp là các hàm xử lý thông tin của lớp và gắn liền với lớp. Phương thức lớp chuyên xử lý thuộc tính lớp
Phương thức tĩnh là loại phương thức đặc biệt không sử dụng bất kỳ thông tin gì của lớp hay đối tượng mặc dù nằm trong lớp
Các thành phần của lớp trong Python có nhiều điểm tương đồng với các ngôn ngữ như C# hay Java. Tuy nhiên, tên gọi trong Python có phần hơi khác. Thuộc tính sơ thẩm tương tự như biến thành viên trong C# hoặc Java. Thuộc tính lớp tương tự như biến thành viên tĩnh trong C#. Phương thức lớp và phương thức tĩnh tương tự như phương thức tĩnh trong C#.
Cách gọi tên trong Python rất hệ thống, phân biệt rõ ràng đặc trưng của thể hiện và đặc trưng của lớp.
Trong bài học này và một số bài học tiếp theo chúng ta sẽ xem xét ý nghĩa và cách xây dựng các thành viên của lớp Python
Constructor trong Python
Vui lòng xem lại hàm __init__[] mà chúng ta đã xây dựng trong ví dụ đầu tiên
ID: 101 Name: Vinh ID: 102 Name: Trung7
__init__[] là một hàm đặc biệt trong Python. hàm tạo [hàm tạo]
Về mặt hình thức __init__[] hoàn toàn tương tự như một lệnh khai báo hàm trong Python. Hàm __init__[] ở trên nhận các tham số tiêu đề, tác giả, nhà xuất bản, năm và ấn bản. Chúng ta cũng sử dụng kỹ thuật chỉ báo kiểu [gõ gợi ý] và cung cấp giá trị mặc định cho các tham số
Constructor trong Python bắt buộc phải có tên là
ID: 101 Name: Vinh ID: 102 Name: Trung14 và phải có ít nhất một tham số, thường đặt tên là
ID: 101 Name: Vinh ID: 102 Name: Trung15. Nếu có nhiều tham số, thì
ID: 101 Name: Vinh ID: 102 Name: Trung15 bắt buộc phải là tham số đầu tiên
Tên gọi tham số
ID: 101 Name: Vinh ID: 102 Name: Trung15 được đặt theo quy ước của Python chứ không bắt buộc. You can set any other names. The you are export must be point is C++ or C# normal has xu direction set is this
Trình tạo và Trình khởi tạo
Nói một cách chính xác,
ID: 101 Name: Vinh ID: 102 Name: Trung18 không phải là hàm tạo theo nghĩa đen của khái niệm này trong việc thiết lập hướng đối tượng. Hàm __init__[] là một hàm khởi tạo – hàm chịu trách nhiệm khởi tạo các giá trị cho đối tượng. Trình khởi tạo không chịu trách nhiệm khởi tạo đối tượng.
Trong Python, hàm __init__[] không chịu trách nhiệm tạo ra đối tượng của lớp. Python sử dụng một 'phương thức ma thuật' có tên gọi là __new__[] để tạo đối tượng của mỗi lớp.
Phương thức ma thuật là một số phương thức được Python tự động tạo ra cùng với lớp và được Python gọi tự động Mục đích thực hiện những công việc đặc biệt.
__new__[] mới thực sự là hàm tạo của lớp Python.
Ví dụ, khi gặp lệnh tạo đối tượng
ID: 101 Name: Vinh ID: 102 Name: Trung19, Python sẽ tự động chạy hàm __new__[] đầu tiên. Kết quả của function __new__[] is object of class book. Sau đó Python continue auto run __init__[]. Đối tượng do __new__[] tạo ra được truyền sang cho __init__[] thông qua tham số đầu tiên [bản thân] trong danh sách.
Vì lý do này, bạn có thể đặt bất kỳ tên gì cho bản thân cũng được nhưng phải để nó ở đầu danh sách tham số.
Vai trò quan trọng hàng đầu của hàm tạo trong Python là tạo và gán giá trị cho thuộc tính thể hiện. Tất cả các tham số còn lại trong danh sách tham số của __init__[] cung cấp giá trị để tạo thuộc tính thể hiện cho đối tượng
Với hàm tạo như trên, bạn có thể tạo đối tượng của lớp Book bằng những cách sau
class Student: count = 0 def __init__[self]: Student.count = Student.count + 1 s1 = Student[] s2 = Student[] s3 = Student[] print["Số lượng sinh viên là:", Student.count]4
Thấy rằng, lệnh tạo đối tượng bằng hàm tạo không khác biệt gì so với lời gọi hàm thông thường
Đặc điểm của thuộc tính và phương thức trong lớp Python
Thuộc tính và phương thức trong Python có điểm khác biệt với biến thành viên và phương thức trong ngôn ngữ C++/C#/Java
Please view ví dụ sau
class Student: count = 0 def __init__[self]: Student.count = Student.count + 1 s1 = Student[] s2 = Student[] s3 = Student[] print["Số lượng sinh viên là:", Student.count]5
Bạn có thể thấy rất nhiều điều lạ ở đây. Dễ thấy nhất là Class Book hoàn toàn trống rỗng. Trong lớp này chỉ có mỗi chuỗi tài liệu. Tuy nhiên, sau khi tạo đối tượng b, bạn có thể sử dụng lại phép toán truy xuất phần tử [ký hiệu dấu chấm]
ID: 101 Name: Vinh ID: 102 Name: Trung20,
ID: 101 Name: Vinh ID: 102 Name: Trung21,
ID: 101 Name: Vinh ID: 102 Name: Trung22, gán giá trị cho chúng và sau đó sử dụng lại chúng trong hàm print[]. Rõ ràng bạn không hề sáng tạo tựa sách, tác giả hay năm trong sách báo
Khi bạn tạo đối tượng b2 và thử truy xuất tiêu đề giá trị [b2. title] thì lại gặp lỗi “không tìm thấy thuộc tính title trong đối tượng b2”
tiêu đề, tác giả, năm được gọi là những thuộc tính của đối tượng b [nhưng không phải là thuộc tính của b2]
Như vậy, trong Python, thuộc tính là những biến có thể chứa các giá trị đặc trưng cho một đối tượng. Nó được tạo hoàn toàn độc lập với lớp khai báo [không cần chỉ định trong lớp khai báo]. Một cách chính xác hơn, biến này được gọi là thuộc tính thể hiện [liên quan đến đối tượng]
Giờ hãy xem một ví dụ khác
class Student: count = 0 def __init__[self]: Student.count = Student.count + 1 s1 = Student[] s2 = Student[] s3 = Student[] print["Số lượng sinh viên là:", Student.count]9
Trong ví dụ này
- Chúng ta khai báo một lớp trống Người. Trong lớp này không có bất kỳ thành viên nào
- Tiếp theo chúng ta tạo đối tượng
ID: 101 Name: Vinh ID: 102 Name: Trung
23 của lớp Người - Chúng ta tuyên bố một chức năng độc lập
ID: 101 Name: Vinh ID: 102 Name: Trung
24 có thể đưa vào dòng thông báo - Điểm rất đặc biệt là lệnh
ID: 101 Name: Vinh ID: 102 Name: Trung
25. Đây là lệnh tạo ra một phương thức [phương thức] trong đối tượng putin và gán cho nó hàm hello[]. Tức là chúng ta ‘gán ghép’ID: 101 Name: Vinh ID: 102 Name: Trung
24 vớiID: 101 Name: Vinh ID: 102 Name: Trung
27 củaID: 101 Name: Vinh ID: 102 Name: Trung
23 - Sau đó, bạn có thể sử dụng lời chào theo phương thức/mô thức từ đối tượng
ID: 101 Name: Vinh ID: 102 Name: Trung
23 nhưng với tên gọi mới say_hello. Hàm say_hello[] được gọi là một phương thức của putin - Tuy nhiên, nếu bạn tạo đối tượng trump từ lớp Người, đối tượng này lại không có phương thức say_hello
Như vậy, giống như thuộc tính, phương thức trong lớp Python cũng không bắt buộc phải khai báo trong lớp thân. Phương thức độc lập với lớp và đối tượng