Sau khi đã trải qua các bài học về Python cơ bản, có lẽ lúc này đây bạn đang rất mong chờ để tìm hiểu tiếp, để được biết nhiều hơn về các kiến thức nâng cao của ngôn ngữ lập trình Python3. Bài học này sẽ là một sự khởi đầu để đưa các bạn đến với các kiến thức trung cấp về Python3.
Để đi sâu hơn về class và lập trình hướng đối tượng trong python, bạn có thể tham khảo phần 7 của series tự học python.
Hãy thực hành thường xuyên để nhớ được kiến thức một cách sâu sắc, và đừng quên rằng bạn có thể sử dụng phím Tab để thụt lề cho các dòng code Python của mình, điều này sẽ giúp code của bạn trở nên ngăn nắp hơn.
Bài này sẽ được chia thành 5 phần sau:
Nội dung chính
1. Class
Cũng giống như các ngôn ngữ lập trình hướng đối tượng khác, Python có hỗ trợ các class. Dưới đây là một vài điểm cơ bản về class trong Python:
– Các class đều được tạo ra bằng từ khóa class.
– Các thuộc tính chính là các biến thuộc về class.
– Các thuộc tính thường là public, và có thể được truy cập tới bằng cách sử dụng toán tử dấu chấm (.), ví dụ: Myclass.Myattribute.
Ví dụ về class:
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
# -----------------------------------------------------------
# creates a class named MyClass
class MyClass:
# assign the values to the MyClass attributes
number = 0
name = "noname"
def Main():
# Creating an object of the MyClass.
# Here, 'me' is the object
me = MyClass()
# Accessing the attributes of MyClass
# using the dot(.) operator
me.number = 1337
me.name = "Harssh"
# str is an build-in function that
# creates an string
print(me.name + " " + str(me.number))
# telling python that there is main in the program.
if __name__=='__main__':
Main()
Kết quả in ra là:
Harssh 1337
2. Method – Phương thức
Phương thức là một nhóm code có chức năng thực hiện một tác vụ cụ thể bên trong chương trình Python của bạn.
– Hàm mà thuộc về một class cụ thể thì được gọi là Phương thức.
– Tất cả các phương thức đều yêu cầu tham số ‘self’. Nếu bạn đã từng code trên các ngôn ngữ OOP khác, thì ‘self’ trong Python chính là ‘this’ ở trong các ngôn ngữ đó. ‘self’ và ‘this’ đều mang ý nghĩa là một đối tượng hiện tại của một class nào đó.
– Để tạo ra một phương thức mới, ta sử dụng từ khóa ‘def’.
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
# -----------------------------------------------------------
# A Python program to demonstrate working of class
# methods
class Vector2D:
x = 0.0
y = 0.0
# Creating a method named Set
def Set(self, x, y):
self.x = x
self.y = y
def Main():
# vec is an object of class Vector2D
vec = Vector2D()
# Passing values to the function Set
# by using dot(.) operator.
vec.Set(5, 6)
print("X: " + str(vec.x) + ", Y: " + str(vec.y))
if __name__=='__main__':
Main()
Kết quả in ra là:
X: 5, Y: 6
3. Kế thừa
Kế thừa trong lập trình OOP được định nghĩa là cách mà một class cụ thể sẽ kế thừa lại các tính năng từ một base class – tức là lớp cha/lớp cơ sở. Base class còn được gọi là ‘Superclass’, và class mà kế thừa từ Superclass thì được gọi là ‘Subclass’ tức là lớp con.
Từ hình vẽ trên ta thấy rằng class Derived có thể kế thừa các tính năng từ class Base, đồng thời nó cũng có thể tự định nghĩa ra các tính năng của riêng mình.
Ví dụ về cú pháp thực hiện kế thừa trong Python:
class derived-classname(superclass-name)
Ví dụ mô tả cách thức hoạt động của kế thừa trong Python:
# A Python program to demonstrate working of inheritance
class Pet:
#__init__ is an constructor in Python
def __init__(self, name, age):
self.name = name
self.age = age
# Class Cat inheriting from the class Pet
class Cat(Pet):
def __init__(self, name, age):
# calling the super-class function __init__
# using the super() function
super().__init__(name, age)
def Main():
thePet = Pet("Pet", 1)
jess = Cat("Jess", 3)
# isinstance() function to check whether a class is
# inherited from another class
print("Is jess a cat? " +str(isinstance(jess, Cat)))
print("Is jess a pet? " +str(isinstance(jess, Pet)))
print("Is the pet a cat? "+str(isinstance(thePet, Cat)))
print("Is thePet a Pet? " +str(isinstance(thePet, Pet)))
print(jess.name)
if __name__=='__main__':
Main()
Kết quả in ra là:
Is jess a cat? True
Is jess a pet? True
Is the pet a cat? False
Is thePet a Pet? True
Jess
4. Iterators
Iterators là các đối tượng mà chúng ta có thể thực hiện các phép lặp/duyệt trên chúng.
– Python sử dụng phương thức __iter__() để trả về một đối tượng iterator của class
– Đối tượng iterator sau đó sẽ sử dụng phương thức __next__() để lấy được next item – phần tử tiếp theo.
– Vòng lặp for sẽ dừng lại khi ngoại lệ StopIteration Exception được kích hoạt.
Dưới đây là ví dụ đảo ngược một chuỗi, được thực hiện trong hàm main
# This program will reverse the string that is passed
# to it from the main function
class Reverse:
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index-= 1
return self.data[self.index]
def Main():
rev = Reverse('Drapsicle')
for char in rev:
print(char)
if __name__=='__main__':
Main()
Kết quả in ra là:
e
l
c
i
s
p
a
r
D
5. Generators
– Sử dụng generator là một cách khác để tạo ra các iterators.
– Thay vì phải sử dụng một class riêng biệt, ta chỉ cần sử dụng tới một hàm.
– Tạo ra phần code cơ sở dành cho phương thức/hàm next() và iter()
– Sử dụng một câu lệnh đặc biệt được gọi là ‘yield’ giúp lưu lại trạng thái (state) của generator và thiết lập một điểm trở về – resume point nhằm dự phòng cho trường hợp hàm next() được gọi lại lần nữa.
Dưới đây là đoạn chương trình Python mô tả hoạt động của các Generators
# A Python program to demonstrate working of Generators
def Reverse(data):
# this is like counting from 100 to 1 by taking one(-1)
# step backward.
for index in range(len(data)-1, -1, -1):
yield data[index]
def Main():
rev = Reverse('Harssh')
for char in rev:
print(char)
data ='Harssh'
print(list(data[i] for i in range(len(data)-1, -1, -1)))
if __name__=="__main__":
Main()
Kết quả in ra là:
h
s
s
r
a
H
['h', 's', 's', 'r', 'a', 'H']
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
- Ebook về python tại đây.
- Các series tự học lập trình khác
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!