Hướng dẫn private class python - trăn lớp riêng

Trong bài này mình sẽ hướng dẫn các bạn cách tạo class trong Python, và các kiến thức liên quan như hàm khởi tạo - tính kế thừa - các mực độ truy cập public / private và public.class trong Python, và các kiến thức liên quan như hàm khởi tạo - tính kế thừa - các mực độ truy cập public / private và public.

Hướng dẫn private class python - trăn lớp riêng

Hướng dẫn private class python - trăn lớp riêng

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

Nói đến class thì không thể không nhắc đến đối tượng, và cách tốt nhất là liên tưởng đến những đối tượng và sự vật trong thực tế. Hãy cùng minh tìm hiểu ngay nhé!

1. Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (object-oriented programming) là phương pháp lập trình phân chia theo từng đối tượng, nó khác hoàn toàn với lập trình hướng module, thay vì mỗi module sẽ sử dụng hàm thì OOP sẽ được quản lý trong một lớp đối tượng.

Mỗi đối tượng sẽ có hai nhóm thông tin chính, thứ nhất là các thuộc tính, thứ hai là những hành động. Ví dụ đối tượng Con Chó thì nó có các thông tin như chủng loại, màu sắc, cân nặng, ... và các hành động như ăn uống, đi vệ sinh, chạy nhảy ...thuộc tính, thứ hai là những hành động. Ví dụ đối tượng Con Chó thì nó có các thông tin như chủng loại, màu sắc, cân nặng, ... và các hành động như ăn uống, đi vệ sinh, chạy nhảy ...

Bài viết này được đăng tại [free tuts .net]

Đây là đối tượng trong thực tế, còn đối tượng trong lập trình thì bạn phải quy về một bài toán cụ thể.

Vi dụ: Bạn cần viết chương trình quản lý sinh viên thì hãy xem sinh viên là một đối tượng, nó có các thông tin như tên sinh viên, năm sinh, tuổi, học khoa nào ... và có các hành động trên đối tượng này như thêm sinh viên, xóa sinh viên, sửa sinh viên.: Bạn cần viết chương trình quản lý sinh viên thì hãy xem sinh viên là một đối tượng, nó có các thông tin như tên sinh viên, năm sinh, tuổi, học khoa nào ... và có các hành động trên đối tượng này như thêm sinh viên, xóa sinh viên, sửa sinh viên.

2. Class trong Python là gì?

Class là một lớp trong Puython, dùng để khai báo cấu trúc thuộc tính và hành động cho một đối tượng nào đó. Bởi vì lập trình không thể diễn tả bằng lời nói được nên phải mượn class để thể hiện.

Ví dụ: Khai báo class cho đối tượng con chó, đặt tên là Dog, nó có thuộc tính màu lông và hành động chạy.: Khai báo class cho đối tượng con chó, đặt tên là Dog, nó có thuộc tính màu lông và hành động chạy.

class Dog:

    # Thuộc tính
    color : ""

    # Hành động
    def run(self):
        print("Con chó đang chạy")

Ví dụ: Tạo class Students gồm cấc thông tin như sau:: Tạo class Students gồm cấc thông tin như sau:

  • Sinh viên có hai thuộc tính gồm tên sinh viên và mã sinh viên
  • Có 4 hành động chính trên sinh viên, đó là thêm sinh viên, sửa sinh viên, xóa sinh viên, và hiển thị thông tin sinh viên

Ta sẽ tạo class cho đối tượng sinh viên như sau:

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)

Như vậy, việc khai báo thuộc tính và phương thức rất giống với khai bái biến và hàm.

3. self của class trong Python

Như bạn thấy ở ví dụ trên, tất cả các phương thức đều có một tham số truyền vào đầu tiên đó là self. Vậy self trong Python là gì?self. Vậy self trong Python là gì?

Self là tham số ảo bắt buộc truyền vào khi khai báo phương thức, nó không được tính là một tham số phải truyền vào khi sử dụng phương thức. Self chính là biến trỏ đến chính đối tượng đó, nếu trong C, C++, C# hay PHP thì nó được gọi là this.bắt buộc truyền vào khi khai báo phương thức, nó không được tính là một tham số phải truyền vào khi sử dụng phương thức. Self chính là biến trỏ đến chính đối tượng đó, nếu trong C, C++, C# hay PHP thì nó được gọi là this.

Ví dụ: Tạo một đối tượng student và sử dụng phương thức add, sau đó sử dung phương thức show.: Tạo một đối tượng student và sử dụng phương thức add, sau đó sử dung phương thức show.

s = Student()
s.add('001', 'Cường Nguyễn Freetuts')
s.show()

Kết quả:

Mặc dù lúc khai báo phương thức add() mình có thêm tham số self nhưng khi sử dụng thì Python đã loại bỏ tham số này. Mục đích là giúp bạn có thể thao tác với dữ liệu của chính class đó.

4. Tạo một instance object trong Python

Object là một khái niệm cơ bản của lập trình hướng đối tượng Python.

Khi bạn khai báo class tức là bạn khai báo cấu trúc dữ liệu cho một nhóm đối tượng. Như ví dụ ở phần 2 thì Dog là nhóm đối tượng dành cho Chó, Student là nhóm đối tượng dành cho sinh viên.Dog là nhóm đối tượng dành cho Chó, Student là nhóm đối tượng dành cho sinh viên.

Để tạo một đối tượng trong nhóm đối tượng đó thì ta phải khởi tạo chúng bằng cách tạo một instance object.instance object.

Ví dụ: Tạo ra ba instance object của đối tương sinh viên.: Tạo ra ba instance object của đối tương sinh viên.

s1 = Student()
s2 = Student()
s3 = Student()

Lúc này, việc sử dụng những phương thức và thuộc tính trên mỗi instance sẽ riêng biệt.

s1 = Student()
s1.add('001', 'Cường Nguyễn Freetuts')
s1.show()

s2 = Student()
s2.add('002', 'Kính Nguyễn Freetuts')
s2.show()


s3 = Student()
s3.add('003', 'Chính Nguyễn Freetuts')
s3.show()

Kết quả::

Mặc dù lúc khai báo phương thức add() mình có thêm tham số self nhưng khi sử dụng thì Python đã loại bỏ tham số này. Mục đích là giúp bạn có thể thao tác với dữ liệu của chính class đó.

4. Tạo một instance object trong Python

Object là một khái niệm cơ bản của lập trình hướng đối tượng Python.

Khi bạn khai báo class tức là bạn khai báo cấu trúc dữ liệu cho một nhóm đối tượng. Như ví dụ ở phần 2 thì Dog là nhóm đối tượng dành cho Chó, Student là nhóm đối tượng dành cho sinh viên.hàm khởi tạo, đây là hàm sẽ được tự động gọi khi bạn tạo mới một đối tượng (instance object).

Để tạo một đối tượng trong nhóm đối tượng đó thì ta phải khởi tạo chúng bằng cách tạo một instance object.

class Dog:
    name = "",
    country = ""

Ví dụ: Tạo ra ba instance object của đối tương sinh viên.

Lúc này, việc sử dụng những phương thức và thuộc tính trên mỗi instance sẽ riêng biệt.name country sẽ có giá trị rỗng. Bạn sẽ phải định nghĩa thêm một phương thức setData để thiết lập giá trị cho chúng.

class Dog:
    name = "",
    country = ""

    def setData(self, name, country):
        self.name = name
        self.country = country

5. Các loại phương thức của class trong Python

d = Dog()
d.setData("Chăn cừu", "Đức")

Phương thức có nhiều loại khác nhau, mỗi loại có một công dụng và ý nghĩa riêng, và thường được áp dụng cho một trường hợp cụ thể nào đó. Vì vậy bạn phải hiểu và phân biệt giữa chúng để sử dụng cho đúng.

class Dog:
    name = "",
    country = ""

    def __init__(self, name, country):
        self.name = name
        self.country =country

Phương thức khởi tạo

d = Dog("Chăn cừu", "Đức")
print(d.name) # Chăn cừu

Phương thức khởi tạo hay còn gọi là hàm khởi tạo, đây là hàm sẽ được tự động gọi khi bạn tạo mới một đối tượng (instance object).

Ví dụ mình có class Dog như sau:: Hàm khởi tạo trong Python.

Nếu khởi tạo object Dog theo cách thông thường thì thế này:

Lúc này hai thuộc tính name và country sẽ có giá trị rỗng. Bạn sẽ phải định nghĩa thêm một phương thức setData để thiết lập giá trị cho chúng.

Ở những ví dụ ở trên bạn có thể thấy rằng: Để sử dụng một phương thức nào thì ta sẽ phải khởi tạo đối tượng rồi mới dùng. Tuy nhiên, có một loại phương thức có thể gọi đến mà không cần phải khởi tạo đối tượng, đó chính là staticmethod.: Để sử dụng một phương thức nào thì ta sẽ phải khởi tạo đối tượng rồi mới dùng. Tuy nhiên, có một loại phương thức có thể gọi đến mà không cần phải khởi tạo đối tượng, đó chính là staticmethod.

Ví dụ: Mình có lớp Mathematics như sau.: Mình có lớp Mathematics như sau.

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)
0

Để sử dụng method addNumbers thì mình làm như sau:addNumbers thì mình làm như sau:

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)
1

Quá phiền hà, ta có thể đổi addNumbers thành một dạng static method như sau.

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)
2

Quan sát kỹ hơn thì ta sẽ thấy những kết luận như sau:

  • Static method không có tham số ảo Self.Self.
  • Sử dụng
    class Student:
    
        # Danh sách thuộc tính
        id = ''
        name = ''
    
        # Phương thức thêm sinh viên
        def add(self, id, name):
            print("Hàm add")
            self.id = id
            self.name = name
    
        # Phương thức xóa sinh viên
        def remove(self, id):
            print("hàm xóa")
    
        # Phương thức sửa sinh viên
        def edit(self, id, name):
            print("Hàm sửa")
    
        # Phương thức hiện thị thông tin
        def show(self):
            print("ID: ", self.id)
            print("NAME: ", self.name)
    6 đặt trước method để khai báo đó là một static method.
  • Sử dụng cú pháp
    class Student:
    
        # Danh sách thuộc tính
        id = ''
        name = ''
    
        # Phương thức thêm sinh viên
        def add(self, id, name):
            print("Hàm add")
            self.id = id
            self.name = name
    
        # Phương thức xóa sinh viên
        def remove(self, id):
            print("hàm xóa")
    
        # Phương thức sửa sinh viên
        def edit(self, id, name):
            print("Hàm sửa")
    
        # Phương thức hiện thị thông tin
        def show(self):
            print("ID: ", self.id)
            print("NAME: ", self.name)
    7 để gọi đến một static method.

Vì static method không khởi tạo đối tượng nên không có tham số Self, vì vậy ta chỉ sử dụng trong trường hợp bạn muốn gắn một hàm xử lý chung chung nào đó vào class để tiện cho việc quản lý code.

6. Kế thừa class trong Python

Một class A có thể được kế thừa từ một class B khác, lúc này ta gọi A là lớp con và B là lớp cha.lớp con và B là lớp cha.

Lớp con có thể kế thừa các thuộc tính và phương thức của lớp cha, trừ trường hợp đó là một private method (sẽ tìm hiểu tiếp ở phần 7).

Việc kế thừa này là rất hay và thực tế.

Ví dụ, bạn khai báo lớp Animal chung chung dành cho động vật, nó có các thuộc tính tên, giới tính, ... và hành động ăn, uống, đi vệ sinh, chạy, ...Animal chung chung dành cho động vật, nó có các thuộc tính tên, giới tính, ... và hành động ăn, uống, đi vệ sinh, chạy, ...

Bây giờ bạn muốn khai báo thêm lớp Dog, đây cũng là một động vật nên cũng có các phương thức và thuộc tính như của Animal. Vì vậy ta có thể thiết lập Dog kế thừa Animal để tiết kiệm chương trình.Dog, đây cũng là một động vật nên cũng có các phương thức và thuộc tính như của Animal. Vì vậy ta có thể thiết lập Dog kế thừa Animal để tiết kiệm chương trình.

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)
3

Kết quả:

7. Mức độ truy cập public / protected và private

Trong lập trình hướng đối tượng thì các thuộc tính và phương thức sẽ có 3 mức độ truy cập khác nhau.

  • Public: là câp độ phổ biến nhất, có thể sử dụng ở cả bên trong và ngoài lớp: là câp độ phổ biến nhất, có thể sử dụng ở cả bên trong và ngoài lớp
  • Protected: Là cấp độ được bảo vệ, chỉ dùng trong nội bộ của lớp đó và lớp con kế thừa.: Là cấp độ được bảo vệ, chỉ dùng trong nội bộ của lớp đó và lớp con kế thừa.
  • Private: Là cấp độ bảo mật nhất, nó chỉ được dùng bên trong chính lớp đó mà thôi.: Là cấp độ bảo mật nhất, nó chỉ được dùng bên trong chính lớp đó mà thôi.

Cách khai báo::

  • Sử dụng hai dấu gạch dưới (__) để khai báo cho mức private
  • Sử dụng một dấu gạch dưới (_) để khai báo cho mức protected
  • Không sử dụng dấu gạch dưới là public.

Xem ví dụ cách khai báo dưới đây:

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)
4

Bây giờ là một ví dụ rõ ràng hơn về các mức độ truy cập trong Python.

class Student:

    # Danh sách thuộc tính
    id = ''
    name = ''

    # Phương thức thêm sinh viên
    def add(self, id, name):
        print("Hàm add")
        self.id = id
        self.name = name

    # Phương thức xóa sinh viên
    def remove(self, id):
        print("hàm xóa")

    # Phương thức sửa sinh viên
    def edit(self, id, name):
        print("Hàm sửa")

    # Phương thức hiện thị thông tin
    def show(self):
        print("ID: ", self.id)
        print("NAME: ", self.name)
5

Trên là những thông tin cơ bản nhất về lập trình hướng đối tượng trong Python, hay nói đơn giản hơn là cách sử dụng class trong Python. Sắp tới mình sẽ có những bài viết giải thích chi tiết từng mục nhỏ trong bài này để giúp các bạn dễ hiểu hơn nhé.