Trong bài viết hôm nay, Lập trình không khó sẽ hướng dẫn các bạn về class và objects trong python. Bài viết này là bước đầu để các bạn làm quen với hướng đối tượng trong python.
Class và objects trong python là gì?
Python là một ngôn ngữ hướng đối tượng và hầu hết mọi thực thể trong Python là một đối tượng(objects), có nghĩa là các lập trình viên sử dụng rộng rãi các lớp và các đối tượng trong khi code bằng Python. Các objects trong Python về cơ bản là sự đóng gói các biến và hàm. Một Class giống như một hàm tạo đối tượng hay một “bản thiết kế” để các lập trình viên tạo các đối tượng.
Cách tạo một class
Cú pháp
class tên_class: các_phương_thức_&_thuộc tính
- Để tạo một class, chúng ta sử dụng từ khóa
class
- Tên class được đặt theo quy tắc đặt định danh trong python.
- Việc khởi tạo class được kết thúc bằng dấu
:
phía sau tên class. - Các phương thức và thuộc tính của class tạo nên phần thân.Phần thân của class được viết lùi vào một khoảng bằng nhau.
VD: tạo một class myClass có thuộc tính là x=5
class myClass: x=5
Tạo một objects trong python
Khi đã có một class, chúng ta có thể sử dụng class đó để tạo một objects trong python.
#ví dụ về tạo objects trong python class myClass: x=5 p = myClass() print(p.x)
Hàm __init__()
Ở trên là một ví dụ về một class đơn giản, bạn có thể thấy nó giống như một hàm. Những class như vậy thường không có ích nhiều trong thực tế.
Để hiểu ý nghĩa một lớp, phải hiểu được bản chất của hàm init().
Tất cả các class đều có một hàm được tạo mặc định là hàm init(). Hàm init() được dùng để gán giá trị thuộc tính cho đối tượng hoặc các hoạt động khác khi đối tượng được tạo.
Như một hàm thông thường hàm init
cũng được tạo bằng từ khóa def
, nếu như trong ngôn ngữ lập trình hướng đối tượng khác thì đây được gọi là hàm tạo. Chúng ta có thể truyền bất kỳ số lượng đối số nào trong khi tạo đối tượng lớp theo định nghĩa của hàm init.
Ví dụ: tạo một class Person với hai thuộc tính là name và age:
class Person: def __init__(self, name, age): self.name = name self.age = age person = Person("Hiếu", 19) print(person.name) #return Hiếu print(person.age) #return 19
Trong ví dụ trên, hàm init hoạt động như một hàm tạo và được gọi tự động ngay khi câu lệnh person = Person(“Hiếu”, 19) được thực thi.
Vì nó là một hàm bên trong một lớp, nên đối số mặc định đầu tiên được truyền vào nó là self
. Tham số thứ hai,là name
được sử dụng để bắt đối số thứ hai được truyền vào là “Hiếu”. Tham số thứ ba, là age
được dùng để bắt đối số thứ ba được truyền vào là 19.
Self là gì?
self
giống như this
trong các ngôn ngữ hướng đối tượng khác. Đối với các ngôn ngữ khác thì mình không cần phải truyền this
hoặc self
vào. Nhưng Python yêu cầu phải như thế.
self
trong Python không nhất thiết phải là self
mà có thể là dat
hoặc dnh
cũng được. Nhưng hầu hết người ta sử dụng self
để thể hiện đây là bản thân object
. Trong tiếng Anh self
có thể hiểu là bản thân nó. Điều này giúp việc đọc code dễ hơn.
Các phương thức
Đối tượng cũng có thể chứa các phương thức. Các phương thức là các hàm dùng để mô tả các đối tượng.
Ví dụ:
class Person: def __init__(self, name, age): self.name = name self.age = age def display(self): print("hello " + self.name) person = Person("Hiếu", 19) person.display()
Trong ví dụ trên, thay vì sử dụng hàm print ở ngoài.Chúng ta có thể tạo một hàm display
có tác dụng tương tự như hàm in.
Kế thừa trong python
Kế thừa là một tính năng được sử dụng trong lập trình hướng đối tượng; nó đề cập đến việc định nghĩa một lớp mới với ít hoặc không sửa đổi một lớp hiện có. Lớp mới được gọi là lớp dẫn xuất và lớp mà nó kế thừa được gọi là lớp cơ sở . Python hỗ trợ kế thừa; nó cũng hỗ trợ nhiều kế thừa . Một lớp có thể kế thừa các thuộc tính và phương thức hành vi từ một lớp khác.
class Car: def __init__(self, color): self.color = color class Oto(Car): def display(self): print("xe màu " + self.color) oto = Oto("xanh") oto.display() #return xe màu xanh
Trong ví dụ trên, mặc dù color
được tạo ở bên trong class Car
. Nhưng vẫn có thể truy cập được từ trong class Oto
.
class myClass(): def method1(self): print("Đây là lớp cơ sở") class childClass(myClass): def method2(self): print("Đây là lớp con") c2 = childClass() c2.method1() c2.method2()
Thêm một ví dụ nữa, các hàm cũng có thể truy cập từ lớp con khi được kế thừa từ lớp cơ sở
kết quả:
Đây là lớp cơ sở Đây là lớp con
Các loại kế thừa
- Kế thừa đơn: Kiểu thừa kế khi một lớp chỉ kế thừa một lớp cơ sở được gọi là thừa kế đơn, như chúng ta đã thấy trong ví dụ trên.
- Đa kế thừa: Khi một lớp kế thừa nhiều lớp cơ sở, nó được gọi là đa kế thừa. Không giống như các ngôn ngữ như Java , Python hoàn toàn hỗ trợ đa kế thừa. Tất cả các lớp cơ sở được đề cập bên trong ngoặc như một danh sách được phân tách bằng dấu phẩy.
class Class1: def __init__(self): print("class 1") class Class2: def __init__(self): print("class 2") class Class3(Class1, Class2): def __init__(self): Class1.__init__(self) Class2.__init__(self) c = Class3()
Kết quả:
class1 class2
- Kế thừa đa cấp:
Khi một lớp kế thừa một lớp cơ sở và sau đó một lớp khác kế thừa lớp dẫn xuất trước đó, tạo thành cấu trúc lớp ‘cha mẹ, con và cháu’, thì nó được gọi là thừa kế đa cấp.
class Class1: def __init__(self): print("class 1") class Class2(Class1): def __init__(self): print("class 2") class Class3(Class2): def __init__(self): Class2.__init__(self) Class1.__init__(self) c = Class3()
kết quả:
class 2 class 1
- Kế thừa phân cấp: Khi một lớp cơ sở được kế thừa bởi nhiều lớp dẫn xuất, nó được gọi là thừa kế phân cấp.
- Di truyền lai: Di truyền lai là khi có sự kết hợp của các kiểu thừa kế đã đề cập ở trên, nghĩa là sự pha trộn của nhiều loại thừa kế.
Thuộc tính riêng của một lớp trong Python
Trong khi thực hiện kế thừa, có một số trường hợp nhất định trong đó chúng ta không muốn tất cả các thuộc tính của một lớp được kế thừa bởi lớp dẫn xuất. Trong các trường hợp đó, chúng ta có thể đặt các thuộc tính đó là thành viên riêng của lớp cơ sở. Chúng ta làm điều này bằng cách thêm hai dấu gạch dưới (__) trước tên biến.
class myClass(object): def __init__(self): self.x = 10 self .__y = 5 class Class1(myClass): def __init__(self): self.z = 20 ob1 = Class1() print(ob1.y)
Khi chạy chương trình sẽ báo lỗi như sau:
Bài viết của mình đến đây là kết thúc, hi vọng sau bài viết các bạn có thể hiểu hơn về class và objects trong python.
Hãy tham gia group lập trình không khó để cùng thảo luận về các vấn đề về lập trình.
Hẹn các bạn vào các bài học sau!!!
Để lại một bình luận