- vừa được xem lúc

Lập Trình Hướng Đối Tượng trong Python

0 0 35

Người đăng: Nguyen Manh Thang

Theo Viblo Asia

Chào các bạn Trong bài này, bạn sẽ tìm hiểu về Lập trình hướng đối tượng (OOP) bằng Python và khái niệm cơ bản của nó và một số các ví dụ. Các bạn cùng tìm hiểu trong bài viết của mình nhé!


Lập trình hướng đối tượng

Python là một ngôn ngữ lập trình đa mô hình. Nó hỗ trợ các cách tiếp cận lập trình khác nhau. Một trong những cách tiếp cận phổ biến để giải quyết vấn đề lập trình là tạo các đối tượng. Điều này được gọi là Lập trình hướng đối tượng (OOP).

Một đối tượng sẽ có hai đặc điểm:

  • Thuộc tính
  • Hành vi

Mình có 1 ví dụ :

Một con vẹt có thể là một đối tượng, vì nó có các đặc tính sau:

  • Tên, tuổi, màu sắc thì sẽ là thuộc tính
  • chạy nhảy, hỏi hoặc hót thì sẽ là hành vi

Trong Python, khái niệm OOP tuân theo một số nguyên tắc cơ bản như sau:


Lớp (Class)

Một lớp là một bản thiết kế cho đối tượng.Với ví dụ con Vẹt ở trên thì chúng ta có thể hình dung class sẽ như một bản phác thảo về con Vẹt. Nó sẽ chứa tất cả các chi tiết về tên, màu sắc v.v. Về con Vẹt. Ví dụ về class:

class Parrot: pass

Ta dùng từ khóa class để định nghĩa cho 1 class Parrot. Từ class bạn có để định nghĩa các thuộc tính chi tiết để mô tả về Parrot.


Đối tượng (Object)

Một đối tượng) là một khởi tạo của một lớp. Khi lớp được định nghĩa nó sẽ là mô tả cho một đối tượng đước xác định.

Ở đây obj là một đối tượng của lớp Parrot.

Bây giờ, chúng ta sẽ bắt đầu xây dựng lớp và các đối tượng của Parrot.

Tạo lớp và đối tượng trong Python
class Parrot: # class attribute species = "bird" # instance attribute def __init__(self, name, age): self.name = name self.age = age # instantiate the Parrot class
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15) # access the class attributes
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species)) # access the instance attributes
print("{} is {} years old".format( blu.name, blu.age))
print("{} is {} years old".format( woo.name, woo.age))

Giá trị hiển thị :

Blu is a bird
Woo is also a bird
Blu is 10 years old
Woo is 15 years old

Trong chương trình trên, chúng ta đã tạo một lớp với tên Parrot. Sau đó, chúng ta xác định các thuộc tính. Các thuộc tính là một đặc tính của một đối tượng.

Các thuộc tính này được định nghĩa bên trong phương thức __init__ của lớp. Đây là phương thức khởi tạo được chạy đầu tiên ngay sau khi đối tượng được tạo.

Tiếp đó chúng ta tạo các instances cho lớp parrot. Với ví dụ ở trên thì bluwoo sẽ là các trá trị để tham chiếu đến đối tượng.

Ta có thể truy cập thuộc tính class bằng cách sử dụng __class__.species. Tương tự ta cũng có thể truy cập các thuộc tính của instance bằng các sử dụng blu.nameblu.age


Phương thức (Methods)

Các phương thức là các hàm được định nghĩa bên trong phần thân của một lớp. Chúng được sử dụng để xác định các hành vi của một đối tượng.

Tạo phương thức trong Python
class Parrot: # instance attributes def __init__(self, name, age): self.name = name self.age = age # instance method def sing(self, song): return "{} sings {}".format(self.name, song) def dance(self): return "{} is now dancing".format(self.name) # instantiate the object
blu = Parrot("Blu", 10) # call our instance methods
print(blu.sing("'Happy'"))
print(blu.dance())

Giá trị hiển thị :

Blu sings 'Happy'
Blu is now dancing

Với ví dụ trên. Ta đã sác định được 2 phương thức là sing()dance(). chúng chính là phương thức cho đối tượng blu


Kế Thừa (Inheritance)

Kế thừa là một cách tạo một lớp mới để sử dụng các thuộc tính của một lớp hiện có mà không cần sửa đổi nó. Lớp mới được hình thành là một lớp dẫn xuất (hoặc lớp con). Tương tự, lớp hiện có là một lớp cơ sở (hoặc lớp cha).

Sử dụng Kế thừa trong Python
# parent class
class Bird: def __init__(self): print("Bird is ready") def whoisThis(self): print("Bird") def swim(self): print("Swim faster") # child class
class Penguin(Bird): def __init__(self): # call super() function super().__init__() print("Penguin is ready") def whoisThis(self): print("Penguin") def run(self): print("Run faster") peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()

Giá trị hiển thị :

Bird is ready
Penguin is ready
Penguin
Swim faster
Run faster

Ở ví dụ trên ta tạo ra 2 lớp là Bird(là lớp cha) và Penguin(là lớp con). Ở đây lớp con sẽ kế thừa các chức năng và thuộc tính của lớp cha. Ở ví dụ trên đứng từ lớp con ta có thể gọi phương thức swim() từ lớp cha

Tiếp đó ví dụ trên ta đã có thể sửa đổi hành vi của lớp cha là phương thức whoisThis(). Hơn thế nữa ta có thể extend chức năng của lớp cha bằng cách tạo ra một phương thức run()

Ngoài ra, ta sử dụng hàm super () bên trong phương thức __init __ (). Điều này cho phép chúng ta chạy phương thức __init __ () của lớp cha bên trong lớp con.


Đóng gói (Encapsulation)

Sử dụng OOP trong Python, ta có thể hạn chế quyền truy cập vào các phương thức và biến. Điều này ngăn dữ liệu khỏi sửa đổi trực tiếp đây có thể gọi là Đóng Gói. Trong Python, ta biểu thị các thuộc tính riêng tư bằng cách sử dụng dấu gạch dưới làm tiền tố, sử dụng _ hoặc __

Đóng gói dữ liệu trong Python
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Selling Price: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer()
c.sell() # change the price
c.__maxprice = 1000
c.sell() # using setter function
c.setMaxPrice(1000)
c.sell()

Giá trị hiển thị :

Selling Price: 900
Selling Price: 900
Selling Price: 1000

Ở ví dụ trên ta đã định nghĩa một lớp computer. Ta sử dụng phương thức __init__() để set giá cho computer. Ta đã thử sửa lại giá. Tuy nhiên sẽ không thể tahy đổi được giá vì trong Python __maxprice là một thuộc tính private.

Vì vậy để thay đổi giá ta cần sử dụng một mà setMaxPrice để lấy price làm tham số.


Tính đa hình (Polymorphism)

Tính đa hình trong OOP sử dụng một giao diện chung cho nhiều kiểu dữ liệu.

Giả sử, chúng ta cần tô màu cho một vật , có nhiều tùy chọn hình dạng (hình chữ nhật, hình vuông, hình tròn). Tuy nhiên, chúng ta có thể sử dụng cùng một phương pháp để tô màu bất kỳ hình dạng nào. Khái niệm này được gọi là Đa hình.

Sử dụng tính đa hình trong Python
class Parrot: def fly(self): print("Parrot can fly") def swim(self): print("Parrot can't swim") class Penguin: def fly(self): print("Penguin can't fly") def swim(self): print("Penguin can swim") # common interface
def flying_test(bird): bird.fly() #instantiate objects
blu = Parrot()
peggy = Penguin() # passing the object
flying_test(blu)
flying_test(peggy) 

Giá trị hiển thị :

Parrot can fly
Penguin can't fly

Ở ví dụ ta đã định nghĩa 2 lớp ParrotPenguin. Mỗi lớp đều có phương thức chung là fly(). Tuy nhiên chức năng thì sẽ khác nhau.

Để sử dụng tính đa hình. Ta tạo một hàm fly_test() nhận bất kì đối tượng là và gọi vào phương thức fly() của đối tượng đó. Vì vậy khi ta chuyển các đối tượng blupeggy thì hàm sử dụng được và trả ra kết quả.


Kết Luận

Dưới đây mình đã giới thiệu với các bạn về Lập Trình Hướng Đối Tương và các ví dụ cụ thể Nếu có bất kì thắc mắc gì hãy để lại comment ở phía dưới nhé.


Tham Khảo chi tiết hơn

https://www.programiz.com/python-programming/object-oriented-programming

Bình luận

Bài viết tương tự

- vừa được xem lúc

So sánh các đặc điểm của Dev khi làm việc tại Nhật và tại nước ngoài

Một bài viết gần đây trên Blog Qiita của một kỹ sư Nhật Bản đã có thâm niên làm việc lâu năm với nhiều môi trường khác nhau được tổng kết lại. Chúng ta hãy cùng đọc qua để xem tác giả có suy nghĩ như thế nào về các Dev trên thế giới nhé.

0 0 26

- vừa được xem lúc

Introductory knowledge of Internet of Things (IoT)

IoT (Internet of Things) là một hệ thống phân tích và tự động hóa tiên tiến khai thác công nghệ mạng, cảm biến, big data và trí tuệ nhân tạo để cung cấp các hệ thống hoàn chỉnh cho một sản phẩm hoặc dịch vụ. Các hệ thống này cho phép tính minh bạch, kiểm soát và hiệu suất cao hơn khi áp dụng cho bất

0 0 32

- vừa được xem lúc

Kiểm thử khả năng tiếp cận

1. Kiểm tra khả năng tiếp cận là gì. Nó là một tập hợp con của Kiểm tra khả năng sử dụng. Phần mềm nhận dạng giọng nói: Nó sẽ chuyển đổi từ được nói thành văn bản, dùng làm đầu vào cho máy tính.

0 0 32

- vừa được xem lúc

Tùy chỉnh Exceptions trong Python

Chào các bạn trong bài viết này, mình sẽ giới thiệu với các bạn về cách tùy chỉnh các Exceptions trong Python.Mình sẽ giải thích cho các bạn hiểu và cách xử dụng chúng.

0 0 24

- vừa được xem lúc

Introductory knowledge of Artificial Intelligence

Kể từ khi phát minh ra máy tính và máy móc, khả năng thực hiện các nhiệm vụ khác nhau của chúng đã tăng lên theo cấp số nhân. Con người đã phát triển hệ thống máy tính trên quan điểm các lĩnh vực làm việc đa dạng, tốc độ ngày càng tăng và kích thước ngày càng giảm theo thời gian.

0 0 19

- vừa được xem lúc

Kỹ năng quản lý dự án để thành công trong công việc

Trong lĩnh vực quản lý dự án, việc chọn được người giao nhiệm vụ thực hiện quản lý dự án không dễ. Người lãnh đạo được chọn phải có một tập hợp các kỹ năng và năng lực quản lý dự án chuyên nghiệp vượt trội.

0 0 27