Rate this post

Một class là một prototype do người dùng định nghĩa mà từ đó các Object được tạo ra. Các class cung cấp phương pháp kết hợp dữ liệu và chức năng lại với nhau. Việc tạo một class mới sẽ tạo ra một loại Object mới, cho phép tạo các instance mới của loại đó. Mỗi instance của class có thể có các attributes hay thuộc tính gắn liền với nó để duy trì trạng thái của nó. Các instance của class hay thể hiện cũng có thể có các phương thức (do class của chúng định nghĩa) để sửa đổi trạng thái của chúng.

Các bài viết liên quan:

Khái niệm về Class trong Python

Class là một khái niệm quan trọng trong lập trình hướng đối tượng (OOP) trong Python. Nó là một bản thiết kế, mô tả các thuộc tính và hành vi của một đối tượng cụ thể.

Một Class định nghĩa các thuộc tính (biến thành viên) và phương thức (hàm thành viên) mà đối tượng của nó có thể có. Đối tượng được tạo từ một Class được gọi là một thể hiện (instance) của Class. Mỗi thể hiện có thể có các giá trị khác nhau cho các thuộc tính và có thể thực hiện các phương thức của Class.

Class được định nghĩa bằng cách sử dụng từ khóa class theo sau là tên của Class. Để tạo một đối tượng từ Class, ta sử dụng cú pháp TênClass().

Dưới đây là một ví dụ về định nghĩa một Class trong Python:

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

    def bark(self):
        print(f"{self.name} is barking!")

    def get_age(self):
        return self.age

Trong ví dụ trên, chúng ta định nghĩa một Class Dog. Class này có hai thuộc tính nameage, và hai phương thức bark()get_age(). Phương thức __init__() được sử dụng để khởi tạo giá trị ban đầu cho các thuộc tính khi tạo đối tượng.

Sau khi định nghĩa Class, ta có thể tạo đối tượng từ Class bằng cách sử dụng cú pháp sau:

my_dog = Dog("Buddy", 3)

Ở đây, chúng ta tạo một đối tượng my_dog từ Class Dog với tên là “Buddy” và tuổi là 3. Ta có thể truy cập thuộc tính và gọi phương thức của đối tượng my_dog như sau:

print(my_dog.name)     # Output: "Buddy"
my_dog.bark()          # Output: "Buddy is barking!"
print(my_dog.get_age()) # Output: 3

Class trong Python cho phép ta tạo các đối tượng có cấu trúc phức tạp, sắp xếp mã trong một cách tổ chức, và tái sử dụng mã dễ dàng, làm cho mã nguồn dễ đọc và dễ bảo trì.

Để hiểu nhu cầu tạo một class trong Python, hãy xem xét một ví dụ, giả sử bạn muốn theo dõi số lượng chó có thể có các attributes khác nhau như giống và tuổi. Nếu một danh sách được sử dụng, phần tử đầu tiên có thể là giống chó trong khi phần tử thứ hai có thể đại diện cho tuổi của nó. Giả sử có 100 con chó khác nhau, thì làm sao bạn biết phần tử nào được cho là phần tử nào? Điều gì sẽ xảy ra nếu bạn muốn thêm các attributes khác cho những chú chó này? Điều này thiếu tổ chức và đó là nhu cầu chính xác cho các class học.

class ClassName:
    # Statement

class tạo cấu trúc dữ liệu do người dùng định nghĩa, chứa các thành viên dữ liệu và hàm thành viên của riêng nó, có thể được truy cập và sử dụng bằng cách tạo một instance của class đó. Một class giống như một bản thiết kế cho một Object.

Một số điểm đặc biệt trên class Python:

  • Các class được tạo bởi class từ khóa.
  • attributes là các biến thuộc về một class.
  • Các attributes luôn public và có thể được truy cập bằng toán tử dấu chấm (.). Ví dụ: Myclass.Myattribute

Định nghĩa một class

class example:
    pass

Trong ví dụ trên, từ khóa class chỉ ra rằng bạn đang tạo một class theo sau là tên của class (trong trường hợp này là example).

Xem thêm instanceof trong java

Object class

Một Object là một instance của một class. Một class giống như một bản thiết kế trong khi một instance là một bản sao của class với các giá trị thực. Nó không còn là một ý tưởng nữa, nó là một đối tượng thực sự có những attributes một cách cụ thể.

Một Object bao gồm:

  • State: Nó được đại diện bởi các attributes của một Object. Nó cũng phản ánh các attributes của một Object.
  • Behaviour: Nó được biểu diễn bằng các methods của một Object. Nó cũng phản ánh phản ứng của một Object với các Object khác.
  • Identity: Nó cung cấp một tên duy nhất cho một Object và cho phép một Object tương tác với các Object khác.

Khai báo các Object (Còn gọi là khởi tạo một class)

Khi một Object của một class được tạo ra, class đó được cho là đã được khởi tạo. Tất cả các instance chia sẻ các attributes và method của class. Nhưng các giá trị của các attributes đó, tức là trạng thái là duy nhất cho từng Object. Một class duy nhất có thể có bất kỳ số lượng phiên bản nào.

Để tạo và sử dụng một Class trong Python, bạn cần thực hiện các bước sau:

  • Bước 1: Định nghĩa Class bằng từ khóa class và tên của Class.
  • Bước 2: Trong Class, định nghĩa các thuộc tính và phương thức của Class bằng cách sử dụng các hàm thành viên.
  • Bước 3: Tạo đối tượng từ Class bằng cách gọi tên Class và lưu trữ đối tượng vào một biến.
  • Bước 4: Sử dụng đối tượng để truy cập thuộc tính và gọi các phương thức của Class.

Ví dụ:

#định nghĩa class Dog
class Dog:

	#thuộc tính attr1 và attr2
	attr1 = "mammal"
	attr2 = "dog"

	# hành vi hay method của class
	def fun(self):
		print("I'm a", self.attr1)
		print("I'm a", self.attr2)


#khởi tạo đối tượng Dog, roger là instance
Rodger = Dog()

#truy vấn vào attr1 của class
print(Rodger.attr1)
#gọi hành vi fun()
Rodger.fun()

Trong ví dụ trên, một Object được tạo về cơ bản là một con chó tên là Rodger. class này chỉ có hai attributes class cho chúng ta biết rằng Rodger là chó và động vật có vú.

Xem thêm Browser Object Model

Tính kế thừa và đa hình trong Class

Trong Python, kế thừa và đa hình là hai khái niệm quan trọng trong lập trình hướng đối tượng. Chúng cho phép tái sử dụng mã và xây dựng các mối quan hệ phân cấp giữa các Class.

  1. Kế thừa (Inheritance):
    • Kế thừa là quá trình một Class con (child class) kế thừa các thuộc tính và phương thức của một Class cha (parent class).
    • Class con có thể sử dụng các thuộc tính và phương thức của Class cha mà không cần viết lại.
    • Kế thừa giúp xây dựng các mối quan hệ phân cấp giữa các Class, từ những khái niệm chung đến những khái niệm cụ thể hơn.
    • Để kế thừa một Class, sử dụng từ khóa class và sau đó là tên Class con theo sau bởi tên Class cha, được đặt trong dấu ngoặc đơn.
  2. Đa hình (Polymorphism):
    • Đa hình là khả năng của một đối tượng có thể hiển thị nhiều hình dạng và hành vi khác nhau dựa trên các Class mà nó thừa kế.
    • Đa hình cho phép chúng ta gọi các phương thức của một đối tượng mà không cần quan tâm đến Class cụ thể của nó, miễn là nó thừa kế từ một Class chung.
    • Đa hình giúp tăng tính linh hoạt và tái sử dụng trong mã nguồn.
    • Để sử dụng đa hình, ta định nghĩa các phương thức cùng tên trong các Class con khác nhau, nhưng có hành vi khác nhau.

Dưới đây là một ví dụ minh họa về kế thừa và đa hình trong Python:

# Kế thừa (Inheritance)
class Animal:
    def speak(self):
        print("Animal is speaking...")

class Dog(Animal):
    def speak(self):
        print("Dog is barking...")

class Cat(Animal):
    def speak(self):
        print("Cat is meowing...")

dog = Dog()
dog.speak()  # Output: "Dog is barking..."

cat = Cat()
cat.speak()  # Output: "Cat is meowing..."

# Đa hình (Polymorphism)
def make_sound(animal):
    animal.speak()

dog = Dog()
cat = Cat()

make_sound(dog)  # Output: "Dog is barking..."
make_sound(cat)  # Output: "Cat is meowing..."

Trong ví dụ trên, ta có Class Animal là Class cha và các Class con DogCat kế thừa từ Animal.

Quản lý truy cập và bảo mật dữ liệu trong Class

Trong Python, có một số phương pháp để quản lý truy cập và bảo mật dữ liệu trong Class. Dưới đây là một số phương pháp thông dụng:

  1. Phương thức getter và setter: Sử dụng các phương thức getter và setter để đọc và ghi dữ liệu vào các thuộc tính của Class. Điều này giúp kiểm soát truy cập và thực hiện các kiểm tra hoặc xử lý trước khi truy cập vào dữ liệu.
class Person:
    def __init__(self, name):
        self._name = name

    def get_name(self):
        return self._name

    def set_name(self, name):
        self._name = name

person = Person("John")
print(person.get_name())  # Output: "John"

person.set_name("Alice")
print(person.get_name())  # Output: "Alice"

Trong ví dụ trên, thuộc tính _name được truy cập thông qua phương thức getter get_name() và phương thức setter set_name(). Điều này giúp đảm bảo rằng dữ liệu chỉ được truy cập và thay đổi qua các phương thức được định nghĩa.

  1. Thuộc tính riêng tư (Private attributes): Sử dụng dấu gạch dưới đằng trước tên thuộc tính (ví dụ: _name) để chỉ ra rằng thuộc tính là riêng tư và không nên truy cập trực tiếp từ bên ngoài Class.
class Person:
    def __init__(self, name):
        self._name = name

person = Person("John")
print(person._name)  # Không nên truy cập thuộc tính riêng tư trực tiếp

Trong ví dụ trên, thuộc tính _name được đánh dấu là riêng tư bằng cách sử dụng dấu gạch dưới. Tuy nhiên, việc truy cập trực tiếp vào thuộc tính riêng tư không được khuyến khích, và thay vào đó nên sử dụng các phương thức getter và setter.

Lưu ý rằng việc quản lý truy cập và bảo mật dữ liệu trong Python dựa vào các quy ước và hợp đồng giữa các lập trình viên. Dấu gạch dưới chỉ là một quy ước chung, nhưng không có sự kiểm soát nghiêm ngặt từ ngôn ngữ Python để ngăn chặn việc truy cập trực tiếp vào thuộc tính riêng tư.

The self trong python

Self đại diện cho instance của lớp. Bằng cách sử dụng “self”, chúng ta có thể truy cập các thuộc tính và phương thức của lớp trong python. Nó liên kết các thuộc tính với các đối số đã cho.

Lý do bạn cần sử dụng self. là do Python không sử dụng cú pháp @ để chỉ các thuộc tính thể hiện. Python đã quyết định thực hiện các phương thức theo cách làm cho thể hiện của phương thức đó được truyền tự động nhưng không được nhận tự động: tham số đầu tiên của phương thức là thể hiện mà phương thức được gọi.

  • Các phương thức class phải có thêm một tham số đầu tiên trong định nghĩa phương thức. Chúng tôi không đưa ra một giá trị cho tham số này khi chúng tôi gọi phương thức, Python cung cấp nó tham số đầu tiên đó là Self.
  • Nếu chúng ta có một phương thức không có đối số, thì chúng ta vẫn có một đối số là Self.
  • Self tương tự với con trỏ này trong C++ và tham chiếu này trong Java.

Khi chúng ta gọi một phương thức của Object này là myobject.method(arg1, arg2), Python sẽ tự động chuyển đổi phương thức này thành MyClass.method(myobject, arg1, arg2) – đây là tất cả những gì đặc biệt về Self.

Xem thêm Object number JavaScript

Phương thức __init__

Phương thức __init__ tương tự như hàm tạo trong C++ và Java. Constructor được sử dụng để khởi tạo trạng thái của Object. Giống như các phương thức, một hàm tạo cũng chứa một tập hợp các câu lệnh (tức là các hướng dẫn) được thực thi tại thời điểm tạo Object. Nó chạy ngay khi một Object của một class được khởi tạo. Phương pháp này rất hữu ích để thực hiện bất kỳ khởi tạo nào bạn muốn thực hiện với Object của mình.

# ví dụ về class person
class Person:

	# khai báo thuộc tính khởi tạo
	def __init__(self, name):
      #self đại diện cho instance
		self.name = name

	# khai báo phương thức say_hi
	def say_hi(self):
		print('Hello, my name is', self.name)

#khởi tạo đối tượng Nikhil
p = Person('Nikhil')
#gọi phương thức say_hi
p.say_hi()

Class và Instance Variables

Các biến instance dành cho dữ liệu, duy nhất cho từng instance và các biến class dành cho các attributes và phương thức được chia sẻ bởi tất cả các instance của class. Biến instance là các biến có giá trị được gán bên trong hàm tạo hoặc phương thức với self trong khi biến class là biến có giá trị được gán trong class.

Xác định các biến instance bằng cách sử dụng một hàm tạo.

#định nghĩa class Dog
class Dog:

	# biến animal
	animal = 'dog'

	# hàm khởi tạo của Dog
	def __init__(self, breed, color):

		# khởi tạo thuộc tính
		self.breed = breed
		self.color = color


# khởi tạo đối tượng
Rodger = Dog("Pug", "brown")
Buzo = Dog("Bulldog", "black")
#truy xuất vào thuộc tính Rodger
print('Rodger là', Rodger.animal)
print('Breed: ', Rodger.breed)
print('Color: ', Rodger.color)
#truy xuất vào thuộc tính Buzo
print('Buzo là', Buzo.animal)
print('Breed: ', Buzo.breed)
print('Color: ', Buzo.color)

Xem thêm String JavaScript

Ứng dụng của Class trong lập trình Python

Class trong lập trình Python là một khái niệm quan trọng và mạnh mẽ, có nhiều ứng dụng phong phú. Dưới đây là một số ứng dụng phổ biến của Class trong lập trình Python:

  1. Đối tượng và hướng đối tượng (OOP): Class được sử dụng để tạo ra các đối tượng, đóng gói dữ liệu và các phương thức xử lý dữ liệu liên quan trong một thực thể độc lập. OOP cho phép xây dựng và quản lý các đối tượng theo mô hình thực tế, giúp tăng tính cấu trúc và dễ bảo trì của mã.
  2. Mô hình hóa thực thể và quan hệ: Class cho phép mô hình hóa các thực thể và quan hệ giữa chúng trong các hệ thống phức tạp. Các đối tượng có thể đại diện cho các khái niệm như người dùng, sản phẩm, đơn hàng, và các phương thức trong Class có thể thực hiện các hoạt động liên quan như tạo, đọc, cập nhật, và xóa.
  3. Mở rộng và kế thừa: Class cho phép kế thừa từ một Class cha và mở rộng chức năng của nó. Điều này giúp tái sử dụng mã và tạo ra các Class con chuyên biệt có các tính năng và thuộc tính riêng.
  4. Đóng gói và ẩn thông tin: Class cho phép đóng gói dữ liệu và các phương thức xử lý liên quan trong một đối tượng, giúp ẩn thông tin bên trong và chỉ công khai các phương thức cần thiết để tương tác với đối tượng.
  5. Mô phỏng các thực thể thực tế: Class có thể được sử dụng để mô phỏng các thực thể thực tế như ô tô, nhân viên, hệ thống tài khoản ngân hàng, và nhiều hơn nữa. Điều này giúp tạo ra các ứng dụng và hệ thống phức tạp hơn, giúp quản lý và tổ chức mã dễ dàng hơn.
  6. Đóng gói thư viện và module: Class được sử dụng để đóng gói mã vào các thư viện và module tái sử dụng. Các Class trong thư viện có thể cung cấp các chức năng và tính năng đa dạng, cho phép lập trình viên sử dụng và mở rộng chúng trong các ứng dụng khác nhau.

Xem thêm Collections trong Java

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now