Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คลาสข้อมูลใน Python (คลาสข้อมูล)


dataclasses เป็นโมดูลใหม่ที่เพิ่มเข้ามาในไลบรารีมาตรฐานของ Python ตั้งแต่เวอร์ชัน 3.7 มันกำหนด @dataclass มัณฑนากรที่สร้างเมธอดตัวสร้างโดยอัตโนมัติ __init__(), วิธีการแทนสตริง __repr__(), เมธอด __eq__() ซึ่งโอเวอร์โหลด ==โอเปอเรเตอร์ (และอีกสองสามรายการ) สำหรับคลาสที่ผู้ใช้กำหนด

มัณฑนากร dataclass มีลายเซ็นต่อไปนี้

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

อาร์กิวเมนต์ทั้งหมดใช้ค่าบูลีนที่ระบุว่าเมธอดหรือเมธอดที่เกี่ยวข้องจะถูกสร้างขึ้นโดยอัตโนมัติหรือไม่

อาร์กิวเมนต์ 'init' จะเป็น True โดยค่าเริ่มต้น มันจะสร้างเมธอด __init__() สำหรับคลาสโดยอัตโนมัติ

ให้เรากำหนด class Student โดยใช้ dataclass decorator ดังนี้

from dataclasses import dataclass

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

เมธอด __init__() ที่สร้างขึ้นโดยอัตโนมัตินั้นเหมือนกับ

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

หากคลาสกำหนดเมธอด __init__() อย่างชัดเจน พารามิเตอร์ init จะถูกละเว้น

อาร์กิวเมนต์ repr เป็นจริงตามค่าเริ่มต้นเช่นกัน ดังนั้นเมธอด __repr__() จะถูกสร้างขึ้นโดยอัตโนมัติ __repr__() เป็นการแสดงสตริงอย่างเป็นทางการของอ็อบเจ็กต์ หากคลาสกำหนด __repr__() ไว้แล้ว พารามิเตอร์นี้จะถูกละเว้น

อาร์กิวเมนต์ eq เป็นค่าเริ่มต้น true สิ่งนี้จะสร้างเมธอด __eq__() โดยอัตโนมัติ วิธีการนี้ถูกเรียกเพื่อตอบสนองต่อตัวดำเนินการเปรียบเทียบเท่ากับ (==) อีกครั้ง หากคลาสกำหนด __eq__() ไว้แล้ว พารามิเตอร์นี้จะถูกละเว้น

หากพารามิเตอร์ 'order' เป็นจริง (ค่าดีฟอลต์คือ False) เมธอดมายากลสำหรับการเปรียบเทียบ __lt__(), __le__(), __gt__() และ __ge__() จะถูกสร้างขึ้นโดยอัตโนมัติ จะใช้โอเปอเรเตอร์เปรียบเทียบ <<=> ตอบ>=ตามลำดับ หากคำสั่งเป็นจริงและ eq เป็นเท็จ จะเกิด ValueError หากคลาสกำหนดเมธอดเหล่านี้ไว้แล้ว) ก็จะส่งผลให้ TypeError

อาร์กิวเมนต์ unsafe_hash หากเป็นเท็จ (ค่าเริ่มต้น) เมธอด __hash__() จะถูกสร้างขึ้นตามวิธีการตั้งค่า eq และการตรึงไว้

อาร์กิวเมนต์ที่หยุดนิ่ง:ถ้าเป็นจริง (ค่าเริ่มต้นคือ เท็จ) จะจำลองอินสแตนซ์ที่หยุดนิ่งแบบอ่านอย่างเดียว

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

asdict()

ฟังก์ชันนี้แปลงอินสแตนซ์ของคลาสเป็นอ็อบเจ็กต์พจนานุกรม

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

astuple()

ฟังก์ชันนี้แปลงอินสแตนซ์ของคลาสเป็นอ็อบเจ็กต์ทูเพิล

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

make_dataclass()

ฟังก์ชันนี้จะสร้าง dataclass ใหม่จากรายการของ tuples ที่กำหนดเป็นอาร์กิวเมนต์ของ field

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