Cách tạo lớp và xác định đối tượng trong Python 3
Python là một ngôn ngữ lập trình hướng đối tượng. Lập trình hướng đối tượng (OOP) tập trung vào việc tạo ra các mẫu mã có thể tái sử dụng, trái ngược với lập trình thủ tục, tập trung vào các lệnh được giải trình tự rõ ràng. Đặc biệt, khi làm việc trên các chương trình phức tạp, lập trình hướng đối tượng cho phép bạn sử dụng lại mã và viết mã dễ đọc hơn, do đó làm cho nó dễ bảo trì hơn.Một trong những khái niệm quan trọng nhất trong lập trình hướng đối tượng là sự phân biệt giữa các lớp và các đối tượng, được định nghĩa như sau:
- Lớp - Bản thiết kế do lập trình viên tạo cho một đối tượng. Điều này xác định một tập hợp các thuộc tính sẽ đặc trưng cho bất kỳ đối tượng nào được khởi tạo từ lớp này.
- Đối tượng - Một thể hiện của một lớp. Đây là version hiện thực của lớp, nơi lớp được hiển thị trong chương trình.
Chúng được sử dụng để tạo các mẫu (trong trường hợp các lớp) và sau đó sử dụng các mẫu (trong trường hợp các đối tượng).
Trong hướng dẫn này, ta sẽ đi qua việc tạo các lớp, khởi tạo đối tượng, khởi tạo thuộc tính bằng phương thức khởi tạo và làm việc với nhiều đối tượng của cùng một lớp.
Các lớp học
Các lớp giống như một bản thiết kế hoặc một nguyên mẫu mà bạn có thể xác định để sử dụng để tạo các đối tượng.
Ta định nghĩa các lớp bằng cách sử dụng từ khóa class
, tương tự như cách ta định nghĩa các hàm bằng cách sử dụng từ khóa def
.
Hãy định nghĩa một lớp có tên Shark
có hai chức năng liên quan đến nó, một để bơi và một để trở nên tuyệt vời:
class Shark: def swim(self): print("The shark is swimming.") def be_awesome(self): print("The shark is being awesome.")
Vì các hàm này được thụt vào trong lớp Shark
, chúng được gọi là các phương thức. Các phương thức là một loại hàm đặc biệt được định nghĩa trong một lớp.
Đối số của các hàm này là từ self
, là tham chiếu đến các đối tượng được tạo dựa trên lớp này. Đối với các cá thể (hoặc đối tượng) tham chiếu của lớp, self
sẽ luôn là tham số đầu tiên, nhưng nó không cần phải là tham số duy nhất.
Việc xác định lớp này không tạo ra bất kỳ đối tượng Shark
nào, chỉ tạo mẫu cho đối tượng Shark
mà ta có thể xác định sau. Nghĩa là , nếu bạn chạy chương trình trên ở giai đoạn này sẽ không có gì được trả về.
Tạo lớp Shark
ở trên đã cung cấp cho ta một bản thiết kế cho một đối tượng.
Các đối tượng
Một đối tượng là một thể hiện của một lớp. Ta có thể lấy lớp Shark
được định nghĩa ở trên và sử dụng nó để tạo một đối tượng hoặc thể hiện của nó.
Ta sẽ tạo một đối tượng Shark
tên là sammy
:
sammy = Shark()
Ở đây, ta đã khởi tạo đối tượng sammy
như một thể hiện của lớp bằng cách đặt nó bằng Shark()
.
Bây giờ, hãy sử dụng hai phương thức với sammy
đối tượng Shark
:
sammy = Shark() sammy.swim() sammy.be_awesome()
Đối tượng Shark
sammy
đang sử dụng hai phương thức swim()
và be_awesome()
. Ta gọi chúng bằng cách sử dụng toán tử dấu chấm ( .
), Được sử dụng để tham chiếu một thuộc tính của đối tượng. Trong trường hợp này, thuộc tính là một phương thức và nó được gọi với dấu ngoặc đơn, giống như cách bạn cũng sẽ gọi với một hàm.
Vì từ khóa self
là một tham số của các phương thức như được định nghĩa trong lớp Shark
, nên đối tượng sammy
được chuyển cho các phương thức. Tham số self
đảm bảo các phương thức có cách tham chiếu đến các thuộc tính đối tượng.
Tuy nhiên, khi ta gọi các phương thức, không có gì được chuyển vào bên trong dấu ngoặc đơn, đối tượng sammy
đang được tự động chuyển bằng toán tử dấu chấm.
Hãy thêm đối tượng trong ngữ cảnh của một chương trình:
class Shark: def swim(self): print("The shark is swimming.") def be_awesome(self): print("The shark is being awesome.") def main(): sammy = Shark() sammy.swim() sammy.be_awesome() if __name__ == "__main__": main()
Hãy chạy chương trình để xem nó làm gì:
- python shark.py
OutputThe shark is swimming. The shark is being awesome.
Đối tượng sammy
gọi hai phương thức trong hàm main()
của chương trình, làm cho các phương thức đó chạy.
Phương pháp xây dựng
Phương thức khởi tạo được sử dụng để khởi tạo dữ liệu. Nó được chạy ngay sau khi một đối tượng của một lớp được khởi tạo. Còn gọi là phương thức __init__
, nó sẽ là định nghĩa đầu tiên của một lớp và trông giống như sau:
class Shark: def __init__(self): print("This is the constructor method.")
Nếu bạn đã thêm phương thức __init__
ở trên vào lớp Shark
trong chương trình ở trên, chương trình sẽ xuất ra thông tin sau mà bạn không cần sửa đổi bất kỳ điều gì trong bản trình bày sammy
:
OutputThis is the constructor method. The shark is swimming. The shark is being awesome.
Điều này là do phương thức khởi tạo được tự động khởi tạo. Bạn nên sử dụng phương thức này để thực hiện bất kỳ quá trình khởi tạo nào bạn muốn làm với các đối tượng lớp của bạn .
Thay vì sử dụng phương thức khởi tạo ở trên, hãy tạo một phương thức sử dụng biến name
mà ta có thể sử dụng để gán tên cho các đối tượng. Ta sẽ chuyển name
làm tham số và đặt self.name
bằng name
:
class Shark: def __init__(self, name): self.name = name
Tiếp theo, ta có thể sửa đổi các chuỗi trong các hàm của bạn để tham chiếu các tên, như bên dưới:
class Shark: def __init__(self, name): self.name = name def swim(self): # Reference the name print(self.name + " is swimming.") def be_awesome(self): # Reference the name print(self.name + " is being awesome.")
Cuối cùng, ta có thể đặt tên của đối tượng Shark
sammy
bằng "Sammy"
bằng cách chuyển nó dưới dạng tham số của lớp Shark
:
class Shark: def __init__(self, name): self.name = name def swim(self): print(self.name + " is swimming.") def be_awesome(self): print(self.name + " is being awesome.") def main(): # Set name of Shark object sammy = Shark("Sammy") sammy.swim() sammy.be_awesome() if __name__ == "__main__": main()
Ta có thể chạy chương trình ngay bây giờ:
- python shark.py
OutputSammy is swimming. Sammy is being awesome.
Ta thấy rằng tên mà ta đã chuyển cho đối tượng đang được in ra. Ta đã định nghĩa phương thức __init__
với tên tham số (cùng với từ khóa self
) và xác định một biến trong phương thức.
Bởi vì phương thức khởi tạo được khởi tạo tự động, ta không cần phải gọi nó một cách rõ ràng, chỉ truyền các đối số trong dấu ngoặc đơn theo sau tên lớp khi ta tạo một thể hiện mới của lớp.
Nếu ta muốn thêm một tham số khác, chẳng hạn như age
, ta có thể thực hiện bằng cách chuyển nó vào phương thức __init__
:
class Shark: def __init__(self, name, age): self.name = name self.age = age
Sau đó, khi ta tạo sammy
đối tượng của bạn , ta có thể vượt qua tuổi của Sammy trong tuyên bố của bạn :
sammy = Shark("Sammy", 5)
Để sử dụng age
, ta cũng cần tạo một phương thức trong lớp gọi nó.
Các phương thức cấu tạo cho phép ta khởi tạo các thuộc tính nhất định của một đối tượng.
Làm việc với nhiều hơn một đối tượng
Các lớp rất hữu ích vì chúng cho phép ta tạo nhiều đối tượng giống nhau dựa trên cùng một bản thiết kế.
Để hiểu cách hoạt động của điều này, hãy thêm một đối tượng Shark
khác vào chương trình của ta :
class Shark: def __init__(self, name): self.name = name def swim(self): print(self.name + " is swimming.") def be_awesome(self): print(self.name + " is being awesome.") def main(): sammy = Shark("Sammy") sammy.be_awesome() stevie = Shark("Stevie") stevie.swim() if __name__ == "__main__": main()
Ta đã tạo một đối tượng Shark
thứ hai có tên là stevie
và chuyển tên "Stevie"
cho nó. Trong ví dụ này, ta đã sử dụng phương thức be_awesome()
với sammy
và phương thức swim()
với stevie
.
Hãy chạy chương trình:
- python shark.py
OutputSammy is being awesome. Stevie is swimming.
Kết quả cho thấy ta đang sử dụng hai đối tượng khác nhau, đối tượng sammy
và đối tượng stevie
, cả hai đều thuộc lớp Shark
.
Các lớp giúp bạn có thể tạo nhiều đối tượng theo cùng một mẫu mà không cần tạo từng đối tượng từ đầu.
Kết luận
Hướng dẫn này hướng dẫn cách tạo các lớp, khởi tạo đối tượng, khởi tạo các thuộc tính bằng phương thức khởi tạo và làm việc với nhiều đối tượng của cùng một lớp.
Lập trình hướng đối tượng là một khái niệm quan trọng cần hiểu vì nó làm cho việc tái chế mã trở nên đơn giản hơn, vì các đối tượng được tạo cho một chương trình này được dùng trong một chương trình khác. Các chương trình hướng đối tượng cũng giúp thiết kế chương trình tốt hơn vì các chương trình phức tạp rất khó viết và yêu cầu lập kế hoạch cẩn thận, và điều này làm cho việc duy trì chương trình theo thời gian ít hơn.
Các tin liên quan
Hướng dẫn về image hóa chuỗi thời gian với Python 32017-03-14
Cách viết comment bằng Python 3
2017-03-03
Cách xác định hàm trong Python 3
2017-02-28
Phân tích và trực quan hóa dữ liệu với pandas và notebook Jupyter bằng Python 3
2017-02-23
Cách vẽ biểu đồ tần suất từ bằng matplotlib với Python 3
2017-02-17
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách viết module trong Python 3
2017-02-03
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên server Ubuntu 16.04
2017-02-01