dàn âm thanh hội trường, âm thanh lớp học, âm thanh phòng họp, loa trợ giảng

Class trong Python

Class trong Python

Python là một ngôn ngữ lập trình hướng đối tượng. Hầu hết mọi thứ trong Python đều là một đối tượng, với các thuộc tính properties và phương thức methods.

SGK, sách ôn thi, sách tham khảo giá rẻ

Lớp Class trong Python kí hiệu là class được hiểu như là một bản mẫu, bản mô tả về các đối tượng nào đó. Class (lớp, loài) chính là một định nghĩa, chứa tất cả các thông tin bao gồm thuộc tính – properties và hành vi – method, function của mọi cá thể (đối tượng – object) trong loài đó.

Ví dụ, chúng ta định nghĩa lớp car thì lớp này sẽ phải bao gồm tất cả những thông tin, đặc điểm chung mà mọi chiếc ô tô đều có:

  • các thuộc tính: fuel – loại nguyên liệu sử dụng, maxspeed – tốc độ tối đa…
  • các hàm, phương thức: refuel() – nạp nhiên liệu, getFuel() – lấy mức nhiên liệu hiện tại, setSpeed() – thiết lập vận tốc là bao nhiêu, getSpeed() – lấy vận tốc hiện tại của xe, drive() – lái xe…

lớp class trong python

Khi đó, giả sử myCar là một object (đối tượng) của class car thì myCar phải có đầy đủ các đặc điểm của lớp car với những thông số cụ thể. Chẳng hạn myCar.fuel có giá trị là xăng, myCar.maxSpeed bằng 18o km/h, khi gọi hàm myCar.getFuel() sẽ trả về mức nhiên liệu hiện tại của myCar

SGK, sách ôn thi, sách tham khảo giá rẻ

Đối tượng (Object) chỉ đơn giản là một tập hợp các dữ liệu (các biến) và các phương thức (các hàm) hoạt động trên các dữ liệu đó. Và, lớp (class) là một kế hoạch chi tiết cho đối tượng.

Xem thêm 15 Cuốn sách học Python miễn phí

Nếu bạn thấy khó hiểu thì nên nhớ rằng từ bản thân từ class có nghĩa là loài, lớp. Nói đến loài mèo, chúng ta đều biết rằng tất cả các con mèo đều có các đặc điểm như màu lông, màu mắt, chiều dài, cân nặng… và các hành động như kêu meo meo, dụi lông vào chân, kêu gừ gừ… Do đó, chúng ta có thể dùng class LoaiMeo để mô tả những đặc điểm này của loài mèo. Nhưng, đối với mỗi một con mèo cụ thể thì từng đặc điểm trên lại có các giá trị cụ thể khác nhau. Chẳng hạn con mèo Milu của tôi thì màu xám, cân nặng 2 kí, mắt xanh… còn con mèo Mimi của bạn thì lại màu trắng, cân nặng 3 kí và mắt nâu.

class lop trong Python

SGK, sách ôn thi, sách tham khảo giá rẻ

Các khái niệm trong class

  • Instance là một hiện thực cụ thể của một lớp, có thể gọi là thực thể (cá thể). Chẳng hạn, với lớp LoaiMeo kể trên thì Milu là một instance của LoaiMeo.
  • Methods: Hàm, phương thức của một class.
  • Data members: Biến chứa dữ liệu gồm: class variable và instance variable.
    • Class variable: Biến dùng chung cho tất cả các đối tượng của lớp, được định nghĩa trong lớp mà không nằm trong methods (hàm thực thi) nào cả. Các biến này không được sử dụng thường xuyên.
    • Instance variable: Biến được định nghĩa bên trong method và chỉ thuộc về các instance (đối tượng thực thể của lớp).

Khai báo Class trong Python

Khai báo lớp trong Python sử dụng từ khóa class, theo sau là tên của lớp, thường bắt đầu bằng kí tự viết hoa và cuối cùng là kí tự :

Dòng tiếp theo, thường là comment sử dụng cặp ngoặc ''' gọi là docstring – một mô tả ngắn gọn về lớp. Docstring này không bắt buộc nhưng khuyến khích sử dụng.

Tiếp theo là các thuộc tính và các hàm, phương thức của lớp. Cấu trúc chung như sau:

class TenLop:
    '''Mô tả về class'''
    <các trường dữ liệu (data field)>
    <các hàm, phương thức>

Ví dụ, khai báo lớp MyClass với thuộc tính a = 5, chúng ta viết như sau:

SGK, sách ôn thi, sách tham khảo giá rẻ
class MyClass:
    '''Đây là docstring. Một lớp mới vừa được khai báo.'''
    a =5

Class tạo ra một local namespace mới trở thành nơi để các thuộc tính của nó được khai báo. Thuộc tính có thể là hàm hoặc dữ liệu.

Tạo một đối tượng trong Python

Để tạo một đối tượng object của class, chẳng hạn lớp MyClass chúng ta cần một biến để lưu đối tượng này và dùng phép gán, theo sau là lời gọi MyClass()

class MyClass:
    '''Đây là docstring. Một lớp mới vừa được khai báo.'''
    a =5
foo = MyClass()

Truy cập đến các thuộc tính, method của class

Để truy cập đến các thuộc tính, hàm, phương thức của lớp, chúng ta sử dụng dấu chấm . sau tên lớp, tên đối tượng và theo sau là tên thuộc tính, tên hàm. Ví dụ, với lớp MyClass ở trên, để truy cập đến thuộc tính a, chúng ta dùng câu lệnh MyClass.a hoặc foo.a

class MyClass: 
  '''Đây là docstring. Một lớp mới vừa được khai báo.''' 
  a =5
foo = MyClass()

print(foo.a) //kết quả 5
print(MyClass.a) //kết quả 5

Chúng ta có thể thay đổi giá trị cho các thuộc tính của một đối tượng trong class sử dụng phép gán giá trị mới cho thuộc tính đó. Chẳng hạn, trong ví dụ trên, chúng ta muốn a nhận giá trị 7 thì làm như sau

SGK, sách ôn thi, sách tham khảo giá rẻ
<pre class="EnlighterJSRAW" data-enlighter-language="python">class MyClass: 
  '''Đây là docstring. Một lớp mới vừa được khai báo.''' 
  a =5
foo = MyClass()

print(foo.a) //kết quả 5
foo.a = 7
print(foo.a)//kết quả 7

print(MyClass.a) //kết quả 5

Lưu ý rằng, cùng là thuộc tính a nhưng gắn với những đối tượng khác nhau thì sẽ là những đối tượng khác nhau. Chẳng hạn, cùng thuộc về lớp ConNguoi, nhưng mỗi con người cụ thể sẽ có những tên, tuổi, đặc điểm không giống nhau.

Xóa bỏ thuộc tính và đối tượng

Ngoài việc đọc các giá trị, ghi các mới cho các trường của class hoặc gọi các hàm, phương thức của class, chúng ta có thể xóa các thuộc tính, các phương thức của một lớp, hoặc xóa một đối tượng của lớp. Để làm việc này, chúng ta sử dụng lệnh del theo sau là tên lớp và tên thuộc tính, phương thức:

>>> class MyClass:
...   a = 5
...
>>> foo = MyClass()
>>> foo.a
5
>>> foo.a = 10 //gán giá trị 10 cho trường a của đối tượng foo
>>> foo.a
10
>>> del foo.a //xóa giá trị trong trường a của đối tượng foo
>>> foo.a
5
>>> del MyClass.a //xóa trường a của lớp MyClass
>>> foo.a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'MyClass' object has no attribute 'a'

Các phương thức method của class

Một class ngoài các thuộc tính properties còn có các hàm, phương thức methods để thực hiện những công việc nào đó. Như trong lớp car ở đầu bài viết thì các phương thức chính là refuel(), getFuel(), setSpeed()

Constructor Hàm __init__() trong Python

Tất cả các lớp đều có một hàm được gọi là __init __ (), hàm này luôn được thực thi mỗi khi một đối tượng của lớp được khởi tạo. Chúng ta sử dụng hàm __init __ () để cung cấp các giá trị khởi tạo cho các thuộc tính hoặc các thao tác khác cần thực hiện khi đối tượng được tạo.

SGK, sách ôn thi, sách tham khảo giá rẻ

Ví dụ sau, chúng ta tạo một lớp có tên Person, sử dụng hàm __init __ () để gán giá trị cho trường tên name và tuổi age:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age
p1 = Person("PHƯƠNG", 34)

print(p1.name)
print(p1.age)

Self trong Python là gì?

Các hàm function, phương thức method trong mỗi lớp khi khai báo thì đều có tham số self, tham số self là một tham chiếu đến thể hiện hiện tại của lớp. Khi gọi thì bạn không cần vì Python sẽ tự động truyền instance vào biến self đó. Như trong ví dụ sau, biến p1 khi được gọi hàm sayHeloo thì self sẽ được tham chiếu đến chính biến p1.

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def sayHeloo(self):
    print("Hello my name is " + self.name)

p1 = Person("PHUONG", 34)
p1.sayHeloo()

Bạn hoàn toàn có thể sử dụng từ khác để thay thế từ self, chẳng hạn từ yours 🙂

class Person:
  def __init__(yours, name, age):
    yours.name = name
    yours.age = age

  def sayHeloo(mine):
    print("Hello my name is " + mine.name)

p1 = Person("PHUONG", 34)
p1.sayHeloo()

Static Methods

Static Methods (phương thức tĩnh) trong Python cũng tương tự như các phương thức chúng ta gặp từ đầu bài viết đến giờ, sự khác biệt duy nhất là phương thức tĩnh được liên kết với một lớp chứ không phải các đối tượng của lớp đó. Nghĩa là bạn sẽ gọi đến static method bằng tên class chứ không phải bằng tên đối tượng.

SGK, sách ôn thi, sách tham khảo giá rẻ

Điều này có nghĩa là một phương thức tĩnh có thể được gọi mà không cần đối tượng cho lớp đó. Điều này cũng có nghĩa là các phương thức tĩnh không thể sửa đổi trạng thái của một đối tượng vì chúng không bị ràng buộc với nó.

Cách tạo phương thức tĩnh trong Python

  • Sử dụng hàm staticmethod() để biến một phương thức bình thường thành phương thức tĩnh;
  • Sử dụng từ khóa @staticmethod trước khi khai báo phương thức.

Dưới đây là ví dụ về cách tạo phương thức tĩnh thứ nhất:

class Calculator:
    def addNumbers(x, y):
        return x + y

# create addNumbers static method
Calculator.addNumbers = staticmethod(Calculator.addNumbers)

print('Product:', Calculator.addNumbers(15, 110))

hoặc cách thứ hai

class Calculator:
    # create addNumbers static method
    @staticmethod
    def addNumbers(x, y):
        return x + y

print('Product:', Calculator.addNumbers(15, 110))

Trong bài viết tiếp theo, chúng ta sẽ lần lượt tìm hiểu các chủ đề khác về class trong Python như tính kế thừa, operator overloading, data encapsulation và private attributes… Mời các bạn đón xem.

SGK, sách ôn thi, sách tham khảo giá rẻ

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *