Python đã là một ngôn ngữ hướng đối tượng kể từ khi nó tồn tại. Bởi vì điều này, việc tạo và sử dụng các lớp và đối tượng là hết sức dễ dàng. Chương này giúp bạn trở thành một chuyên gia trong việc sử dụng hỗ trợ lập trình hướng đối tượng của Python. Show
Nếu bạn không có bất kỳ kinh nghiệm nào trước đây với lập trình hướng đối tượng (OO), bạn có thể muốn tham khảo một khóa học giới thiệu về nó hoặc ít nhất là một hướng dẫn nào đó để bạn nắm bắt được các khái niệm cơ bản. Tuy nhiên, đây là sự giới thiệu nhỏ của lập trình hướng đối tượng (OOP) để đưa bạn ở tốc độ- Tổng quan về thuật ngữ OOP
Tạo các lớp họcTuyên bố lớp tạo ra một định nghĩa lớp mới. Tên của lớp ngay lập tức theo lớp từ khóa theo sau là một dấu hai chấm như sau - class ClassName: 'Optional class documentation string' class_suite
Thí dụSau đây là ví dụ về lớp Python đơn giản - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary
Tạo đối tượng thể hiệnĐể tạo các phiên bản của một lớp, bạn gọi lớp bằng tên lớp và truyền trong bất kỳ đối số nào của phương thức __init__ của nó chấp nhận. "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000) Truy cập các thuộc tínhBạn truy cập các thuộc tính của đối tượng bằng toán tử DOT với đối tượng. Biến lớp sẽ được truy cập bằng tên lớp như sau - emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount Bây giờ, đặt tất cả các khái niệm lại với nhau - #!/usr/bin/python class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000) emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2 Bạn có thể thêm, xóa hoặc sửa đổi các thuộc tính của các lớp và đối tượng bất cứ lúc nào - emp1.age = 7 # Add an 'age' attribute. emp1.age = 8 # Modify 'age' attribute. del emp1.age # Delete 'age' attribute. Thay vì sử dụng các câu lệnh thông thường để truy cập các thuộc tính, bạn có thể sử dụng các hàm sau -
hasattr(emp1, 'age') # Returns true if 'age' attribute exists getattr(emp1, 'age') # Returns value of 'age' attribute setattr(emp1, 'age', 8) # Set attribute 'age' at 8 delattr(empl, 'age') # Delete attribute 'age' Thuộc tính lớp tích hợpMỗi lớp Python tiếp tục theo dõi các thuộc tính tích hợp và chúng có thể được truy cập bằng toán tử DOT như bất kỳ thuộc tính nào khác-
Đối với lớp trên, chúng tôi hãy cố gắng truy cập tất cả các thuộc tính này - #!/usr/bin/python class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary print "Employee.__doc__:", Employee.__doc__ print "Employee.__name__:", Employee.__name__ print "Employee.__module__:", Employee.__module__ print "Employee.__bases__:", Employee.__bases__ print "Employee.__dict__:", Employee.__dict__ Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - Employee.__doc__: Common base class for all employees Employee.__name__: Employee Employee.__module__: __main__ Employee.__bases__: () Employee.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0xb7c84994>, 'empCount': 2, 'displayEmployee': <function displayEmployee at 0xb7c8441c>, '__doc__': 'Common base class for all employees', '__init__': <function __init__ at 0xb7c846bc>} Phá hủy các vật thể (bộ sưu tập rác)Python xóa các đối tượng không cần thiết (các loại hoặc trường hợp lớp tích hợp) tự động để giải phóng không gian bộ nhớ. Quá trình mà Python định kỳ lấy lại các khối bộ nhớ không còn được sử dụng được gọi là bộ sưu tập rác. Trình thu gom rác của Python chạy trong quá trình thực hiện chương trình và được kích hoạt khi số lượng tham chiếu của đối tượng đạt đến 0. Số lượng tham chiếu của một đối tượng thay đổi khi số lượng bí danh chỉ ra nó thay đổi. Số lượng tham chiếu của một đối tượng tăng lên khi nó được gán một tên mới hoặc được đặt trong một container (danh sách, tuple hoặc từ điển). Số lượng tham chiếu của đối tượng giảm khi nó bị xóa với DEL, tham chiếu của nó được chỉ định lại hoặc tham chiếu của nó đi ra khỏi phạm vi. Khi số lượng tham chiếu của một đối tượng đạt đến 0, Python sẽ tự động thu thập nó. class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary0 Bạn thường sẽ không nhận thấy khi người thu gom rác phá hủy một ví dụ mồ côi và đòi lại không gian của nó. Nhưng một lớp có thể thực hiện phương thức đặc biệt __del __ (), được gọi là phá hủy, được gọi khi thể hiện sắp bị phá hủy. Phương pháp này có thể được sử dụng để làm sạch bất kỳ tài nguyên không bộ nhớ nào được sử dụng bởi một thể hiện. Thí dụBộ hủy __del __ () này in tên lớp của một thể hiện sắp bị phá hủy - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary1 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary2 Lưu ý - lý tưởng nhất, bạn nên xác định các lớp của mình trong tệp riêng biệt, sau đó bạn nên nhập chúng vào tệp chương trình chính của mình bằng câu lệnh nhập. − Ideally, you should define your classes in separate file, then you should import them in your main program file using import statement. Di truyền lớpThay vì bắt đầu từ đầu, bạn có thể tạo một lớp bằng cách lấy nó từ một lớp có từ trước bằng cách liệt kê lớp cha trong ngoặc đơn sau tên lớp mới. Lớp con thừa hưởng các thuộc tính của lớp cha và bạn có thể sử dụng các thuộc tính đó như thể chúng được xác định trong lớp con. Một lớp con cũng có thể ghi đè các thành viên và phương thức dữ liệu từ cha mẹ. Cú phápCác lớp học có nguồn gốc được tuyên bố giống như lớp cha mẹ của họ; Tuy nhiên, một danh sách các lớp cơ sở để kế thừa được đưa ra sau tên lớp - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary3 Thí dụclass Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary4 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary5 Bộ hủy __del __ () này in tên lớp của một thể hiện sắp bị phá hủy - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary6 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
Thay vì bắt đầu từ đầu, bạn có thể tạo một lớp bằng cách lấy nó từ một lớp có từ trước bằng cách liệt kê lớp cha trong ngoặc đơn sau tên lớp mới.Lớp con thừa hưởng các thuộc tính của lớp cha và bạn có thể sử dụng các thuộc tính đó như thể chúng được xác định trong lớp con. Một lớp con cũng có thể ghi đè các thành viên và phương thức dữ liệu từ cha mẹ. Cú phápclass Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary7 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary8 Các lớp học có nguồn gốc được tuyên bố giống như lớp cha mẹ của họ; Tuy nhiên, một danh sách các lớp cơ sở để kế thừa được đưa ra sau tên lớp -Cách tương tự, bạn có thể lái một lớp từ nhiều lớp cha như sau -
Đại diện chuỗi có thể đánh giáCuộc gọi mẫu: repr (obj) __str __ (tự) Thí dụclass Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary9 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)0 Bộ hủy __del __ () này in tên lớp của một thể hiện sắp bị phá hủy -Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - Thí dụ"This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)1 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)2 Bộ hủy __del __ () này in tên lớp của một thể hiện sắp bị phá hủy - "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)3 Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau - "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)4 Làm thế nào để bạn gọi các lớp học trong Python?Để tạo các phiên bản của một lớp, bạn gọi lớp bằng tên lớp và truyền trong bất kỳ đối số nào của phương thức __init__ của nó chấp nhận.using class name and pass in whatever arguments its __init__ method accepts.
Làm thế nào để bạn gọi một thuộc tính lớp trong Python?Bạn có thể tạo một thuộc tính bằng cách gọi Thuộc tính () với một tập hợp các đối số thích hợp và gán giá trị trả về của nó cho thuộc tính lớp.Tất cả các đối số cho thuộc tính () là tùy chọn.Tuy nhiên, bạn thường cung cấp ít nhất một hàm setter.calling property() with an appropriate set of arguments and assigning its return value to a class attribute. All the arguments to property() are optional. However, you typically provide at least a setter function.
Làm thế nào để bạn gọi một ví dụ của một lớp?Có ba bước để tạo và gọi một phương thức thể hiện:.. Đối tượng của lớp: Khai báo một đối tượng của lớp của bạn trong phương thức chính hoặc từ bên ngoài lớp..... Định nghĩa phương thức: Viết tiêu đề và mã cơ thể của phương thức như dưới đây: .... Phương thức gọi: Bất cứ khi nào bạn muốn sử dụng phương thức, hãy gọi ObjectName.methodName () ;. Bạn có thể gọi một lớp trong một lớp trăn lớp không?Phương thức gọi từ một lớp khác trong một lớp khác trong Python.Chúng ta có thể gọi phương thức của một lớp khác bằng cách sử dụng tên lớp và chức năng của họ với toán tử DOT.we can call the method of another class by using their class name and function with dot operator. |