Lớp dữ liệu python thêm thuộc tính
Đôi khi thật thú vị khi chỉ mê mẩn một lúc. Python là một trong những ngôn ngữ kịch bản phổ biến nhất hiện nay và chúng tôi cũng yêu thích nó. Đó là một lý do tại sao LogicMonitor có thể thực thi bất kỳ tập lệnh hoặc ngôn ngữ lập trình nào được môi trường của bạn hỗ trợ. Điều đó có nghĩa là bạn có thể tận hưởng các tính năng mới nhất của ngôn ngữ yêu thích trong công cụ giám sát yêu thích của mình (phải không?). Nếu Python là phó của bạn, hãy cho Python 3. Lớp dữ liệu của 7 hãy thử Show
Thấu hiểu quá khứ để trân trọng hiện tạiGroovy, một phần mở rộng của Java và PowerShell là hai ngôn ngữ mà tôi tin rằng hỗ trợ mạnh mẽ OOP theo cách thân thiện với người dùng. Chúng cho phép bạn thao tác nhanh các đối tượng tùy chỉnh và báo cáo giá trị của chúng. Python, trong khi cực kỳ phổ biến và mạnh mẽ, bị tụt lại phía sau một chút. Để xem một số ví dụ trước đây, hãy tìm kiếm trên internet về “thuộc tính lớp in Python”. Tại thời điểm của bài viết này, đây là một số kết quả tìm kiếm hàng đầu từ một trong những tài nguyên dành cho nhà phát triển phổ biến nhất, Stack Overflow Sẽ không tốt hơn nhiều nếu bạn cố gắng tìm kiếm Python 2 chính thức. 7 tài liệu cho các lớp học. Lưu ý mỗi khi các ví dụ của họ in thông tin về các lớp mà họ cho rằng bạn đã biết chính xác những gì bạn muốn hiển thị hoặc bạn sẵn sàng dành thời gian để in rõ ràng từng thuộc tính của lớp? Dựa trên các kết quả tìm kiếm và câu trả lời, cũng như kinh nghiệm của bản thân, tôi thấy có hai thách thức chính khi làm việc với các đối tượng Python tùy chỉnh
Đối với những người ít hiểu biết về kịch bản, hãy sử dụng phép loại suy để giải thích vấn đề. Hãy hình dung một đối tượng lớp Python như một tờ báo vật lý chứa đầy những câu chuyện. Bạn là người đã in tờ báo này. Bạn đã biết những câu chuyện. Bạn cẩn thận đặt từng đoạn văn, câu chuyện và tiêu đề. Trong các phiên bản Python trước, khi bạn đưa tờ báo cho Python và để kiểm tra độ tỉnh táo, hãy yêu cầu nó đọc cho bạn một trong các bản tin, nó sẽ yêu cầu bạn chỉ định từng đoạn bạn muốn đọc thay vì chỉ đưa cho bạn toàn bộ câu chuyện. Dễ thương khi con bạn nói vậy; Python bắt đầu trưởng thànhNở muộn còn hơn không nởVào năm 2017, PEP 557 đã khái niệm hóa các Lớp dữ liệu, “tồn tại chủ yếu để lưu trữ các giá trị có thể truy cập được bằng cách tra cứu thuộc tính” và gần một năm sau, việc phát hành Python 3. 7. 0 chính thức cung cấp triển khai. Data Classes cõng tắt gợi ý kiểu (PEP 484) và chú thích kiểu (PEP 526), tương ứng được giới thiệu trong Python 3. 5 và 3. 6. Khi nói đến làm việc với các đối tượng, mọi người mong đợi có thể dự đoán các loại dữ liệu một cách nhất quán. Mặc dù Python vẫn không phải là ngôn ngữ được nhập chính xác, nhưng sự kết hợp giữa gợi ý kiểu và chú thích giúp cả người dùng và IDE biết loại dữ liệu nào sẽ mong đợi khi làm việc thông qua cơ sở mã lớn hơn Sự Lười Biếng Thúc Đẩy Tự Động HóaMột phần khác của sự trưởng thành là trung thực về điều bạn quan tâm và cách dành nhiều thời gian hơn để tập trung vào điều đó. Có thể đó chỉ là tôi, nhưng tôi cảm thấy như DataClass đã bị bán quá mức hoặc ai đó thực sự thích xử lý các quy trình tẻ nhạt. Các từ chính xác từ PEP 557 liên quan đến Lớp dữ liệu là “[…]thực sự không có gì đặc biệt về lớp. trình trang trí thêm các phương thức được tạo vào lớp và trả về cùng một lớp mà nó đã được cung cấp. […] Các lớp dữ liệu giúp bạn không phải viết và duy trì các phương thức này. ” Những "phương thức được tạo" này là gì? . Giả sử bạn có một lớp Python được định nghĩa như sau @dataclass class InventoryItem: '''Class for keeping track of an item in inventory.''' name: str unit_price: float quantity_on_hand: int = 0 def total_cost(self) -> float: return self.unit_price * self.quantity_on_hand Do đó, trình trang trí Lớp dữ liệu ("@dataclass"), sẽ tự động tạo mã sau đây cho bạn def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0) -> None: self.name = name self.unit_price = unit_price self.quantity_on_hand = quantity_on_hand def __repr__(self): return f'InventoryItem(name={self.name!r}, unit_price={self.unit_price!r}, quantity_on_hand={self.quantity_on_hand!r})' def __eq__(self, other): if other.__class__ is self.__class__: return (self.name, self.unit_price, self.quantity_on_hand) == (other.name, other.unit_price, other.quantity_on_hand) return NotImplemented def __ne__(self, other): if other.__class__ is self.__class__: return (self.name, self.unit_price, self.quantity_on_hand) != (other.name, other.unit_price, other.quantity_on_hand) return NotImplemented def __lt__(self, other): if other.__class__ is self.__class__: return (self.name, self.unit_price, self.quantity_on_hand) < (other.name, other.unit_price, other.quantity_on_hand) return NotImplemented def __le__(self, other): if other.__class__ is self.__class__: return (self.name, self.unit_price, self.quantity_on_hand) <= (other.name, other.unit_price, other.quantity_on_hand) return NotImplemented def __gt__(self, other): if other.__class__ is self.__class__: return (self.name, self.unit_price, self.quantity_on_hand) > (other.name, other.unit_price, other.quantity_on_hand) return NotImplemented def __ge__(self, other): if other.__class__ is self.__class__: return (self.name, self.unit_price, self.quantity_on_hand) >= (other.name, other.unit_price, other.quantity_on_hand) return NotImplemented Ba mươi dòng mã được tạo tự động đó chỉ dành cho ba thuộc tính. tên, đơn_giá và số_lượng. Lý do tại sao tôi tin rằng điều này bị bán quá mức đáng kể là do mức độ nỗ lực để tự tạo và duy trì các phương thức đó trở nên cực kỳ cồng kềnh khi bạn thêm nhiều thuộc tính lớp hơn. Ai cảm thấy thích đối phó với điều đó? . Smith làm nhưng một phần nhờ anh ấy, bạn không cần phải Lợi ích lớp dữ liệuChúng tôi có thể thấy một số lợi ích của Lớp dữ liệu dựa trên thông tin chúng tôi có cho đến nay
Cảnh báo lớp dữ liệuTheo PEP 557, Các lớp dữ liệu không có nghĩa là thay thế hoàn toàn bất kỳ thư viện Python nào khác. Hơn nữa, bài báo PEP nói rằng các Lớp dữ liệu không phù hợp khi
Sự kết luậnLớp dữ liệu Python kết hợp các tính năng Python hiện có thành một cú pháp khai báo, ngắn gọn để mang lại cho người dùng trải nghiệm được cải thiện khi quản lý các lớp được sử dụng chủ yếu để lưu trữ dữ liệu. Một trong những lợi ích chính của Lớp dữ liệu Python là bạn có thể nhanh chóng in các biểu diễn chuỗi của các lớp và thuộc tính của chúng. Do khả năng mở rộng mạnh mẽ của LogicMonitor, bạn có thể tận dụng các Lớp dữ liệu Python trong số tất cả các tính năng Python mới nhất khác trong quá trình giám sát và quản trị cổng thông tin của mình 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.
Tôi có nên luôn sử dụng Dataclass không?Kết luận. dataclasses là một mô-đun mạnh mẽ giúp chúng tôi, những nhà phát triển Python, mô hình hóa dữ liệu của chúng tôi, tránh viết mã soạn sẵn và viết mã đẹp và sạch hơn nhiều . Tôi khuyến khích bạn khám phá và tìm hiểu thêm về các tính năng đặc biệt của lớp dữ liệu, tôi sử dụng nó trong tất cả các dự án của mình và tôi khuyên bạn cũng nên làm như vậy.
__ Post_init __ Python là gì?Phương thức __post_init__ được gọi ngay sau khi khởi tạo . Nói cách khác, nó được gọi sau khi đối tượng nhận được các giá trị cho các trường của nó, chẳng hạn như tên, lục địa, dân số và chính thức_lang.
@dataclass trong Python là gì?Lớp dữ liệu là các lớp python, nhưng phù hợp để lưu trữ các đối tượng dữ liệu . Mô-đun này cung cấp một trình trang trí và các chức năng để tự động thêm các phương thức đặc biệt đã tạo như __init__() và __repr__() vào các lớp do người dùng định nghĩa. |