Các lớp dữ liệu có thể có các phương thức python không?

Nếu bạn mới bắt đầu hoặc đã viết mã bằng Python và thích Lập trình hướng đối tượng nhưng chưa quen với mô-đun dataclasses, bạn đã đến đúng nơi

Trong bài viết này, chúng ta sẽ tìm hiểu

  • Các lớp dữ liệu là gì và lợi ích của chúng là gì
  • Chính xác thì chúng khác với các lớp Python thông thường như thế nào
  • Và khi nào bạn nên sử dụng chúng

Nền lớp dữ liệu

Các lớp dữ liệu được sử dụng chủ yếu để mô hình hóa dữ liệu trong Python. Nó tô điểm cho các lớp Python thông thường và không có giới hạn nào, điều đó có nghĩa là nó có thể hoạt động như một lớp điển hình

Một ví dụ nhỏ về Lớp dữ liệu

from dataclasses import dataclass

@dataclass
class Car:
   color: str
   manufacturer: str
   top_speed_km: int

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

dataclasses đã được giới thiệu trong Python 3. 7 như một phần của PEP 557

Hãy đi sâu vào một số ví dụ mã


Lợi ích của lớp dữ liệu

Triển khai tích hợp các phương pháp đặc biệt

Khi sử dụng trình trang trí @dataclass, chúng ta không phải tự triển khai các phương thức đặc biệt, điều này giúp chúng ta tránh mã soạn sẵn, như phương thức init (_init_ ), phương thức biểu diễn chuỗi (_repr_), các phương thức được sử dụng để sắp xếp thứ tự . g. lt, le, gt và ge), những thứ này so sánh lớp như thể nó là một bộ các trường của nó, theo thứ tự.
Đọc về một số phương pháp tích hợp bổ sung khác trong tài liệu chính thức.

Nó sẽ trông như thế nào với một lớp học thông thường

class Car:
  color: str
  manufacturer: str
  top_speed_km: int

  def  __init__(self, color: str, manufacturer: str, top_speed_km: bool):
    self.color = color
    self.manufacturer = manufacturer
    self.top_speed_km = top_speed_km

  def __lt__(self, other_car):
      return self.top_speed_km < other_car.top_speed_km

red_ferrari = Car(color='red', manufacturer='Ferrari', top_speed_km=320)
print(red_ferrari) # <__main__.Car object at 0x7f218789ca00>
black_ferrari = Car(color='red', manufacturer='Ferrari', top_speed_km=347)
print(red_ferrari < black_ferrari) # True

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Lưu ý hai điểm đó

  • Bởi vì chúng tôi đã không triển khai phương thức đặc biệt _repr_, khi chúng tôi in phiên bản Car, chúng tôi sẽ nhận được tên của lớp và địa chỉ đối tượng
  • Để so sánh giữa 2 phiên bản Ô tô, tôi phải tự triển khai phương thức "nhỏ hơn" (_lt_)

Ví dụ với trình trang trí lớp dữ liệu

from dataclasses import dataclass

@dataclass(order=True)
class Car:
  color: str
  manufacturer: str
  top_speed_km: int

slow_tesla = Car(top_speed_km=261, color='white', manufacturer='Tesla')
print(slow_tesla) # Car(color='white', manufacturer='Tesla', top_speed_km=261)
fast_tesla = Car(top_speed_km=280, color='white', manufacturer='Tesla')
print(slow_tesla < fast_tesla) # True

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Cần phải đặt order=True nếu chúng tôi muốn triển khai các phương thức theo thứ tự đặc biệt được đưa vào lớp dữ liệu (e. g. lt)
  • Khi chúng tôi cố gắng in đối tượng
    class Car:
      color: str
      manufacturer: str
      top_speed_km: int
    
      def  __init__(self, color: str, manufacturer: str, top_speed_km: bool):
        self.color = color
        self.manufacturer = manufacturer
        self.top_speed_km = top_speed_km
    
      def __lt__(self, other_car):
          return self.top_speed_km < other_car.top_speed_km
    
    red_ferrari = Car(color='red', manufacturer='Ferrari', top_speed_km=320)
    print(red_ferrari) # <__main__.Car object at 0x7f218789ca00>
    black_ferrari = Car(color='red', manufacturer='Ferrari', top_speed_km=347)
    print(red_ferrari < black_ferrari) # True
    
    0, chúng tôi thấy các giá trị thực của đối tượng, không phải địa chỉ của đối tượng, không giống như ví dụ trước
  • Chúng ta có thể so sánh hai đối tượng mà không cần chúng ta thực hiện các phương thức đặc biệt

Di sản

Giống như các lớp python thông thường, tính kế thừa cũng có thể là lợi thế của chúng ta ở đây, không cần phải xử lý việc xây dựng lớp cha

from dataclasses import dataclass

@dataclass
class Car:
  color: str
  manufacturer: str
  top_speed_km: int

@dataclass
class ElectricCar(Car):
  battery_capacity_kwh: int
  maximum_range_km: int

white_tesla_model_3 = ElectricCar(color='white', manufacturer='Tesla', top_speed_km=261, battery_capacity_kwh=50, maximum_range_km=455)

print(white_tesla_model_3)
# ElectricCar(color='white', manufacturer='Tesla', top_speed_km=261, battery_capacity_kwh=50, maximum_range_km=455)

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Chỉ để tham khảo, đây là giao diện của nó khi sử dụng một lớp thông thường

class Car:
  color: str
  manufacturer: str
  top_speed_km: int

  def  __init__(self, color: str, manufacturer: str, top_speed_km: int):
    self.color = color
    self.manufacturer = manufacturer
    self.top_speed_km = top_speed_km

class ElectricCar(Car):
  battery_capacity_kwh: int
  maximum_range_km: int

  def __init__(self, color: str, manufacturer: str, top_speed_km: int, battery_capacity_kwh: int, maximum_range_km: int):
      super().__init__(color, manufacturer, top_speed_km)
      self.battery_capacity_kwh = battery_capacity_kwh
      self.maximum_range_km: maximum_range_km

white_tesla_model_3 = ElectricCar(color='white', manufacturer='Tesla', top_speed_km=261, battery_capacity_kwh=50, maximum_range_km=455)
print(white_tesla_model_3)

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tôi hy vọng bạn có thể thấy rằng chúng tôi đã lưu nhiều mã soạn sẵn ngay cả trong đoạn mã nhỏ này và không lặp lại mọi lần bắt đầu tham số

Một lớp dữ liệu có thể có các phương thức không?

Một lớp dữ liệu đề cập đến một lớp chỉ chứa các trường và phương thức thô để truy cập chúng (getters và setters) . Đây chỉ đơn giản là các thùng chứa dữ liệu được sử dụng bởi các lớp khác. Các lớp này không chứa bất kỳ chức năng bổ sung nào và không thể hoạt động độc lập trên dữ liệu mà chúng sở hữu.

Lớp dữ liệu trong Python là gì?

Trong Python, lớp dữ liệu là lớp được thiết kế để chỉ chứa các giá trị dữ liệu . Chúng không khác với các lớp thông thường, nhưng chúng thường không có bất kỳ phương thức nào khác. Chúng thường được sử dụng để lưu trữ thông tin sẽ được chuyển giữa các phần khác nhau của chương trình hoặc hệ thống.

Các lớp dữ liệu Python có thể thay đổi không?

namedtuple s là bất biến và không thể có giá trị mặc định cho các thuộc tính, trong khi các lớp dữ liệu có thể thay đổi và có thể có chúng .

Python có các lớp dữ liệu không?

Các lớp dữ liệu là một trong những tính năng mới của Python 3. 7 . Với các lớp dữ liệu, bạn không cần phải viết mã soạn sẵn để khởi tạo, biểu diễn và so sánh phù hợp cho các đối tượng của mình. Bạn đã thấy cách định nghĩa các lớp dữ liệu của riêng mình, cũng như. Cách thêm giá trị mặc định vào các trường trong lớp dữ liệu của bạn.