Computer >> Máy Tính >  >> Lập trình >> Python

Lớp dữ liệu trong Python (dataclasses)

Dataclasses là một mô-đun mới được thêm vào thư viện tiêu chuẩn của Python kể từ phiên bản 3.7. Nó định nghĩa trình trang trí @dataclass tự động tạo phương thức ma thuật hàm tạo __init __ (), phương thức biểu diễn chuỗi __repr __ (), phương thức __eq __ () nạp chồng toán tử ==(và một số phương thức khác) cho một lớp do người dùng xác định.

Trình trang trí dataclass có chữ ký sau

dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)

Tất cả các đối số nhận giá trị Boolean cho biết liệu một phương thức ma thuật hoặc các phương thức tương ứng có được tạo tự động hay không.

Đối số 'init' là True theo mặc định. Nó sẽ tự động tạo phương thức __init __ () cho lớp.

Hãy để chúng tôi xác định lớp Sinh viên bằng cách sử dụng trình trang trí dataclass như sau

from dataclasses import dataclass

@dataclass
class Student(object):
   name : str
   age : int
   percent : float

Phương thức __init __ () được tạo tự động giống như

def __init__(self, name: str, age: int, percent: float):
   self.name = name
   self.age = age
   self.percent = percent

Nếu lớp xác định rõ ràng phương thức __init __ () thì tham số init sẽ bị bỏ qua.

Đối số repr cũng đúng theo mặc định. Do đó, phương thức __repr __ () sẽ được tạo tự động. __Repr __ () là một biểu diễn chuỗi chính thức của đối tượng. Nếu lớp đã định nghĩa __repr __ (), thì tham số này sẽ bị bỏ qua.

Đối số eq theo mặc định là true. Điều này sẽ tự động tạo phương thức __eq __ (). Phương thức này được gọi để đáp ứng với toán tử so sánh bằng (==). Một lần nữa, nếu lớp đã định nghĩa __eq __ (), thì tham số này sẽ bị bỏ qua.

Nếu tham số 'order' là true (mặc định là False), các phương thức ma thuật để so sánh, __lt __ (), __le __ (), __gt __ () và __ge __ () các phương thức sẽ được tạo ra, chúng triển khai các toán tử so sánh <<=> ans> =tương ứng. Nếu thứ tự là đúng và eq là sai, một ValueError sẽ xuất hiện. Nếu lớp đã định nghĩa bất kỳ phương thức nào trong số này), nó sẽ dẫn đến TypeError.

Đối số không an toàn_hash nếu Sai (mặc định), một phương thức __hash __ () được tạo theo cách đặt eq và cố định.

đối số cố định:Nếu đúng (mặc định là Sai), hãy mô phỏng các phiên bản được cố định chỉ đọc.

>>> from data_class import Student
>>> s1=Student('Naveen', 21, 50.50)
>>> s2=Student('Mangesh', 20, 50.00)
>>> s1==s2
False

asdict ()

Hàm này chuyển đổi cá thể lớp thành một đối tượng từ điển.

>>> import dataclasses
>>> dataclasses.asdict(s1)
{'name': 'Naveen', 'age': 21, 'percent': 50.5}

astuple ()

Hàm này chuyển đổi cá thể lớp thành một đối tượng tuple.

>>> dataclasses.astuple(s2)
('Mahesh', 20, 50.0)

make_dataclass ()

Hàm này tạo một kính dữ liệu mới từ danh sách các bộ giá trị được cung cấp dưới dạng đối số trường.

>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)])
>>> n = NewClass(10,20)
>>> n
NewClass(x=10, y=20)