Làm thế nào chúng ta gọi phương thức của một lớp trong Python?
Python đã là một ngôn ngữ hướng đối tượng kể từ khi nó tồn tại. Do đó, việc tạo và sử dụng các lớp và đối tượng 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 chưa có bất kỳ kinh nghiệm nào trước đây về 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 được các khái niệm cơ bản. Tuy nhiên, đây là phần giới thiệu nhỏ về Lập trình hướng đối tượng (OOP) để giúp bạn tăng tốc − Tổng quan về thuật ngữ OOP
Tạo lớp họcCâu lệnh lớp tạo ra một định nghĩa lớp mới. Tên của lớp ngay sau từ khóa lớp theo sau là dấu hai chấm như sau - class ClassName: 'Optional class documentation string' class_suite
Thí dụSau đây là ví dụ về một 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 sơ thẩmĐể tạo các thể hiện của một lớp, bạn gọi lớp đó bằng tên lớp và truyền vào bất kỳ đối số nào mà 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 thuộc tínhBạn truy cập các thuộc tính của đối tượng bằng toán tử dấu chấm 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 đoạn mã trên được thực thi, nó 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 lớp và đối tượng bất kỳ 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 tuân theo các thuộc tính dựng sẵn và chúng có thể được truy cập bằng cách sử dụng toán tử dấu chấm giống như bất kỳ thuộc tính nào khác -
Đối với lớp trên, chúng ta hãy thử truy cập tất cả các thuộc tính này - Khi đoạn mã trên được thực thi, nó 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': , 'empCount': 2, 'displayEmployee': , '__doc__': 'Common base class for all employees', '__init__': } Phá hủy đồ vật (Thu gom rác)Python tự động xóa các đối tượng không cần thiết (kiểu dựng sẵn hoặc thể hiện lớp) để giải phóng không gian bộ nhớ. Quá trình Python thu hồi định kỳ các khối bộ nhớ không còn được sử dụng nữa được gọi là Bộ sưu tập rác Trình thu gom rác của Python chạy trong khi thực thi chương trình và được kích hoạt khi số tham chiếu của đối tượng bằng 0. Số lượng tham chiếu của một đối tượng thay đổi khi số lượng bí danh trỏ tới 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 vùng chứa (danh sách, bộ hoặc từ điển). Số lượng tham chiếu của đối tượng giảm khi đối tượng bị xóa bằng del, tham chiếu của đối tượng được gán lại hoặc tham chiếu của đối tượng nằm ngoài phạm vi. Khi số lượng tham chiếu của một đối tượng bằng 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 Thông thường, bạn sẽ không nhận thấy khi trình thu gom rác phá hủy một phiên bản mồ côi và lấy lại không gian của nó. Nhưng một lớp có thể triển khai phương thức đặc biệt __del__(), được gọi là hàm hủy, được gọi khi thể hiện sắp bị hủy. Phương pháp này có thể được sử dụng để dọn sạch mọi tài nguyên không phải bộ nhớ được sử dụng bởi một phiên bản Thí dụHàm hủy __del__() này in tên lớp của một thể hiện sắp bị 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 đoạn mã trên được thực thi, nó 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 ý - Tốt nhất, bạn nên định nghĩa 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ách sử dụng câu lệnh nhập Kế thừa 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ó sẵn bằng cách liệt kê lớp cha trong dấu ngoặc đơn sau tên lớp mới Lớp con kế thừa 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 định nghĩa trong lớp con. Một lớp con cũng có thể ghi đè các thành viên dữ liệu và phương thức từ lớp cha cú phápCác lớp dẫn xuất được khai báo giống như lớp cha của chúng; 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 đoạn mã trên được thực thi, nó 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 Tương tự như vậy, bạn có thể điều khiển một lớp từ nhiều lớp cha như 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.salary6 Bạn có thể sử dụng hàm issubclass() hoặc isinstance() để kiểm tra mối quan hệ của hai lớp và thể hiện
Phương thức ghi đèBạn luôn có thể ghi đè các phương thức của lớp cha. Một lý do để ghi đè các phương thức của cha mẹ là vì bạn có thể muốn chức năng đặc biệt hoặc khác trong lớp con của mình 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.salary7 Khi đoạn mã trên được thực thi, nó 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 Phương pháp nạp chồng cơ sởBảng sau liệt kê một số chức năng chung mà bạn có thể ghi đè trong các lớp của riêng mình - __init__ ( tự [,args. ] ) Constructor (với bất kỳ đối số tùy chọn nào) cuộc gọi mẫu. obj = className(args) 2__del__( tự ) Destructor, xóa một đối tượng cuộc gọi mẫu. xóa đối tượng 3__repr__( tự ) Biểu diễn chuỗi có thể đánh giá được cuộc gọi mẫu. đại diện (obj) 4__str__( tự ) Biểu diễn chuỗi có thể in cuộc gọi mẫu. str(obj) 5__cmp__ ( tự, x ) đối tượng so sánh cuộc gọi mẫu. cmp(obj, x) Toán tử quá tảiGiả sử bạn đã tạo một lớp Vector để biểu diễn các vectơ hai chiều, điều gì sẽ xảy ra khi bạn sử dụng toán tử cộng để cộng chúng? Tuy nhiên, bạn có thể định nghĩa phương thức __add__ trong lớp của mình để thực hiện phép cộng vectơ và sau đó toán tử cộng sẽ hoạt động theo mong đợi - 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 đoạn mã trên được thực thi, nó 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 Ẩn dữ liệuCác thuộc tính của một đối tượng có thể hiển thị hoặc không hiển thị bên ngoài định nghĩa lớp. Bạn cần đặt tên cho các thuộc tính có tiền tố gạch dưới kép và những thuộc tính đó sẽ không hiển thị trực tiếp với người ngoài 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 đoạn mã trên được thực thi, nó 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 Python bảo vệ các thành viên đó bằng cách thay đổi tên bên trong để bao gồm tên lớp. Bạn có thể truy cập các thuộc tính như đối tượng. _className__attrName. Nếu bạn thay thế dòng cuối cùng của mình như sau, thì nó phù hợp với bạn - |